Mephisto Posté(e) le 15 janvier 2007 Partager Posté(e) le 15 janvier 2007 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 More sharing options...
lorinc Posté(e) le 15 janvier 2007 Partager Posté(e) le 15 janvier 2007 ben avec un bête printf, ça marche. quand tu fais VAR=$(programme arguments) dans un shell, le contenu de $VAR est ce qui a été sorti par programme sur la sortie standard. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 16 janvier 2007 Auteur Partager Posté(e) le 16 janvier 2007 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 ! merci quand meme pour ton aide Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 17 janvier 2007 Partager Posté(e) le 17 janvier 2007 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 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 More sharing options...
Mephisto Posté(e) le 23 janvier 2007 Auteur Partager Posté(e) le 23 janvier 2007 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 More sharing options...
16ar Posté(e) le 27 janvier 2007 Partager Posté(e) le 27 janvier 2007 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 More sharing options...
Mephisto Posté(e) le 28 janvier 2007 Auteur Partager Posté(e) le 28 janvier 2007 pour faire simple, je vais expliquer ce que fait mon programme, et tout devrait s'eclairer 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 More sharing options...
16ar Posté(e) le 1 février 2007 Partager Posté(e) le 1 février 2007 pour faire simple, je vais expliquer ce que fait mon programme, et tout devrait s'eclairer 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 (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 More sharing options...
Mephisto Posté(e) le 2 février 2007 Auteur Partager Posté(e) le 2 février 2007 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 si tu veux plus de details, n'hesite pas, mais le code est relativement propre quoi que pas forcement tres clair Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.