#26 Le 15/07/2010, à 14:53
- ehmicky
Re : [Résolu]Input de commandes comme "ls"
Non, c'est un descripteur de fichier, ou encore un pointeur/lien vers le fichier.
Mais si le descripteur de fichier est le numéro 0 d'un processus, il s'agit bien d'une redirection du stdin de ce processus depuis ce fichier ?
Néanmoins, j'avoue que ta remarque sur le fait de ne pas pouvoir faire pointer plusieurs fichiers à fd 0 suffit à prouver pour moi qu'un argument donné à une commande n'implique pas nécessairement une redirection de l'input de cette commande depuis cet argument : sinon, comment expliquer les commandes ayant plusieurs arguments ?
Donc, encore une fois, c'est cette citation qui m'a induit en erreur !
Il y a encore des zones d'ombre dans mon esprit quant au mécanisme précis des file descriptors ouverts lorsqu'une commande a des fichiers comme argument, mais bon pour la question initiale, maintenant tout est ok.
Merci
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#27 Le 06/08/2010, à 01:29
- ehmicky
Re : [Résolu]Input de commandes comme "ls"
Après plusieurs nouveaux tests, je commence vraiment à reconsidérer le fait qu'un argument passé à une commande Unix ouvre toujours, le temps de l'exécution de cette commande, et pour le subshell dans lequel elle s'exécute, un file descriptor accessible en lecture, mais :
- il s'agit non pas de fd0, fd1 ni de fd2 (ça peut être par exemple fd3), ce qui résout le fait de donner plusieurs arguments à cette commande
- le file descriptor pointe vers le fichier spécifié comme argument, une anonymous pipe ou encore un fichier temporaire stockant le contenu d'une string si l'argument est une string.
Je pense que les commandes Unix utilisent des fonctions pour ouvrir des fd, et que c'est de cette manière qu'elles manipulent les arguments qui leur sont passées... faudrait que j'aille voir le code en C pour en être sûr, mais en attendant n'hésitez pas à me dire si vous pensez vraiment que je fais réellement fausse route.
En tout cas, si c'est le cas, ça signifie effectivement que spécifier un argument ne signifie pas rediriger l'input (c'est-à-dire manipuler fd0) mais ouvrir un nouveau fd en lecture, ce qui est différent.
Dernière modification par ehmicky (Le 06/08/2010, à 01:32)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne