Bonjour à tous,

je suis en train de créer un programme en C qui doit lire les arguments de trois façon différentes :
- Les arguments classiques (./programme arg1 arg2 ...) -> ça c'est bon
- Le programme doit lancer une invite de commande (comme bash un peu) -> ça c'est bon
- La troisième qui me pose problème est la suivante :
arg1 arg2 ... | ./programme

Quand j'utilise while read(STDIN_FILENO, line, 255) ... cela marche avec la deuxième façon mais pas avec la troisième (pipe), en tout cas pas comme je le voudrais.

Quand j'affiche la ligne saisie avec read, cela zappe en quelques sortes le premier arguments, comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
echo toto | ./shell (ligne affichée : toto)
echo toto && true | ./shell (ligne affichée : rien)
En fait, je pense que le shell exécute la commande de gauche, puis passe la main à mon programme.

Avec "echo toto | ./shell", bash fait echo (donc saute une ligne), puis passe l'argument toto à mon programme.
Avec "echo toto && true" | ./shell", bash éxéxute 'echo toto && true' (donc affiche toto) et passe la main à mon programme sans argument.

Quelqu'un a-t-il une idée svp ?

Merci beaucoup d'avance

Désolé en fait j'ai trouvé la réponse il suffisait d'utiliser la fonction isatty (prononcer iz euh ti ti ouaille )