Jump to content

Archived

This topic is now archived and is closed to further replies.

Mephisto

[RESLOU] reutiliser string dans le shell

Recommended Posts

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 ?

Share this post


Link to post
Share on other sites

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. :devil:

Share this post


Link to post
Share on other 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:

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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))

Share this post


Link to post
Share on other 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 ^^)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 ?)

Share this post


Link to post
Share on other 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:

Share this post


Link to post
Share on other sites

×
×
  • Create New...