Aller au contenu

[RESLOU] reutiliser string dans le shell


Mephisto

Messages recommandés

encore une question existentielle:

admettons qu'un programme genere une string et qu'on veuille la reutiliser sur le shell...

j'etais d'abord parti sur l'idee du char *main qui me retourne ma string, la solution marche, mais a la compilo, j'ai un warning : main, c'est cence etre un int...

j'ai donc essaye avec fd = open("/dev/tty", O_WRONLY) et write(fd, str, my_strlen(str)); puis close(fd).

la, il affiche ma string sur le term que j'utilise, mais le shell ne peut pas la reutiliser (avec un ls `monprog`, qui me renverrait par exemple une liste d'emplacements a lire)...

des idees ?

Lien vers le commentaire
Partager sur d’autres sites

ui, mais pas dans mon cas, si ton programe fait deja de l'affichage, c'est mort.

maintenant la solution: pour tout ce qui est affichage durant l'execution, fd = open("/dev/tty, O_WRONLY"); write(fd, str, trlen(str)); apres, on peut ecrire le resultat avec un write normal.

nota: le printf, c'est marrant 5mns, mais c'est (beaucoup) trop lent.

vive le write ! :transpi:

merci quand meme pour ton aide :chinois:

Lien vers le commentaire
Partager sur d’autres sites

Ca m'intéresse aussi de savoir ca (je suis pas sur que tu ai compris le sujet en fait lorinc, la on veut que ce qui est affiché soit utilisable par le prompt)

En gros, tu fais :

rentrer le chemin ?

/var/bidouille/

Et /var/bidouille est deja ecris, et tu peux supprimer si tu veux, ou rajouter /blabla a la fin par exemple.

Bon, si ca se trouve, c moi qui ai compris de travers :cartonrouge:

EDIT : je cherche plus a savoir ca mais en C++, je vais creuser de mon coté vu que y'a deja la réponse en C

Lien vers le commentaire
Partager sur d’autres sites

j'ai absolument aucune notion de C++ mais... si tu compile un code en C avec ton compilo C++, ca va tourner non ?

en theorie, le C n'est-il pas compatible avec le C++ ?

et sinon, c'est pas tellement une question de supprimer ce qui a deja ete ecrit, le but est de renvoyer une selection d'elements d'une liste qui s'est affiche sur ton term or, si tu ecrit tout sur ton term, le programme va renvoyer tes elements selectionnes ainsi que tout le bordel de l'affichage.

en ouvrant le /dev/tty, tu ecris ailleurs, meme si le texte apparait sur ton term, par contre, a la fin, il te siffut d'ecrire le resultat de ta selection directement avec un printf, ou un write(1, str, strlen(str))

Lien vers le commentaire
Partager sur d’autres sites

j'ai absolument aucune notion de C++ mais... si tu compile un code en C avec ton compilo C++, ca va tourner non ?

en theorie, le C n'est-il pas compatible avec le C++ ?

Ca va marcher ...

Mais on perd l'intérêt de la conception objet a ce niveau, ou alors faut faire une classe maison, mais dans ce cas, y'a surement quelqu'un qui a du le faire, et ca doit deja exister. Et pour un acces aussi "bas niveau", ca devrait être dans les classes de base de la librairie standard

et sinon, c'est pas tellement une question de supprimer ce qui a deja ete ecrit, le but est de renvoyer une selection d'elements d'une liste qui s'est affiche sur ton term or, si tu ecrit tout sur ton term, le programme va renvoyer tes elements selectionnes ainsi que tout le bordel de l'affichage.

en ouvrant le /dev/tty, tu ecris ailleurs, meme si le texte apparait sur ton term, par contre, a la fin, il te siffut d'ecrire le resultat de ta selection directement avec un printf, ou un write(1, str, strlen(str))

Arf, j'ai pas compris :'(

Mais je sens que ca peut m'interesser aussi, tu peux réexpliquer d'une autre manière s'il te plait (désolé d'être relou ^^)

Lien vers le commentaire
Partager sur d’autres sites

pour faire simple, je vais expliquer ce que fait mon programme, et tout devrait s'eclairer :fou:

en gros, je voulais afficher un menu sur mon terminal, ou l'on puisse selectionner differentes options (par exemple, un ./prog /* etait sence permettre de faire une selection des dossiers de la racine)

on est donc oblige d'ecrire quelque chose pour pouvoir se balader dans la selection.

mais en plus, je devais pouvoir renvoyer au shell la selection.

admettons que, je fasse en ls -lR `./prog /*`, je selectionne /boot, /dev, /src, ..., et le programme me fait un ls des dossiers selectionnes

mais si j'ecris tout le menu sur le meme term, ca va merder au niveau du renvoie d'informations : il ne faut renvoyer que la selection

alors, tout ce qui s'ecrit durant l'execution du prog, on le colle sur un autre fd, celui de /dev/tty, et il n'y a que le resultat que l'on vient ecrire sur 1.

Lien vers le commentaire
Partager sur d’autres sites

pour faire simple, je vais expliquer ce que fait mon programme, et tout devrait s'eclairer :chinois:

en gros, je voulais afficher un menu sur mon terminal, ou l'on puisse selectionner differentes options (par exemple, un ./prog /* etait sence permettre de faire une selection des dossiers de la racine)

on est donc oblige d'ecrire quelque chose pour pouvoir se balader dans la selection.

mais en plus, je devais pouvoir renvoyer au shell la selection.

admettons que, je fasse en ls -lR `./prog /*`, je selectionne /boot, /dev, /src, ..., et le programme me fait un ls des dossiers selectionnes

mais si j'ecris tout le menu sur le meme term, ca va merder au niveau du renvoie d'informations : il ne faut renvoyer que la selection

alors, tout ce qui s'ecrit durant l'execution du prog, on le colle sur un autre fd, celui de /dev/tty, et il n'y a que le resultat que l'on vient ecrire sur 1.

Ok ! Donc ce que t'ecris en gros avec write, la personne ne le verra pas.

Bon ben meme la, c'était pas ce a quoi je m'attendais lol :) Merci d'avoir eclairci :francais: (par contre, c pas un peu GRUIK ? Si t'ecris dans un terminal ouvert par la personne, mais c pas le terminal courant, quand elle reviendra a son term, elle verra ce que t'as ecrit dedans, non ?)

Lien vers le commentaire
Partager sur d’autres sites

we, mais non, j'ai du mal m'expliquer.

ce que t'ecris avec le write(fd * *), la personne le voit, c'est juste ke le term ne l'interpretera pas

si tu fais un ls `./monprog meschoix`, ta liste de choix s'affiche a l'ecran, tu te ballade, tu selectionne ce que tu veux renvoyer sur ton shell.

par exemple, rm -rf `~/ ~/Documents ~/misc ~/Documents/temp` va t'afficher une liste avec toutes ces possibilitees, et tu pourra selectionner uniquement misc a renvoyer au shell

pour un exemple, je te met mon code ici: http://ftpmephisto.free.fr/msl200701191412.tar.gz

edit: desole, j'explique pas plus, je suis claque :cartonrouge:

si tu veux plus de details, n'hesite pas, mais le code est relativement propre quoi que pas forcement tres clair :cartonrouge:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...