Exercice système - C - Programmation
Marsh Posté le 18-08-2011 à 20:28:29
Oui mais non. Ici, on t'aidera sûrement, mais faire ton boulot à ta place ? Certainement pas.
Marsh Posté le 18-08-2011 à 20:38:57
bonsoir,
je n'ai jamais demandé qu'on fasse le boulot a ma place , mais des fois il n'ya pas 36 solutions ! ce n'est pas un devoir que je dois rendre, je le fais pour moi, donc j'ai interet a comprendre et non a avoir une solution !
je souhaite juste qu'on m'eclaire un peu !
Marsh Posté le 19-08-2011 à 10:29:18
1) la fonction bidule tente de lire sur le descripteur de fichier STDIN_FILENO L octets dans buf.
Si la lecture a réussi à lire au moins un octet, elle écrit l'ensemble des octets lu dans les 2 descripteurs de fichier STDOUT_FILENO et STDERR_FILENO.
Et ceci en boucle jusqu'à ce que la fonction read n'arrive plus à lire d'octets.
STDIN_FILENO , STDOUT_FILENO et STDERR_FILENO sont des constantes definies et ayant pour valeurs 0 , 1 et 2 ( entree standard, sortie standard, sortie d'erreur ). http://www.linux-france.org/articl [...] din-3.html
Cela signifie donc que ta fonction lit sur l'entrée standard , et écrit le résultat lu sur la sortie standard et sur la sortir d'erreur également.
2) Pour se servir d'un tel code pour recopier le contenu d'un fichier dans un autre et sur la sortie standard, je te conseille de regarder du coté des fonctions close, et dup / dup2 . http://www.linux-kheops.com/doc/ma [...] up2.2.html http://www.linux-kheops.com/doc/ma [...] ose.2.html . Avec la combinaison de ces 2 fonctions, tu devrais pouvoir effectuer ce qui est demandé.
Marsh Posté le 19-08-2011 à 15:56:25
ce que j'ai fait:
j'ouvre avec open les fichiers f1 et f2 ;
ensuite avec dub2 , je fais dub2(STDIN_FILENO , f1), donc je duplique l'entrée . de meme pour f2 et la sortie d'erreur.
par contre avec la fonction close() ? c'est pour fermer SDIN_FILENO et STDERR_FILENO une fois dupliquer ? il se passerai quoi sinon surtout dans le cas de STDIN parceque je dois lire dessus!
je te remercie beaucoup xilebo, c'est vraiment très clair
Marsh Posté le 19-08-2011 à 16:14:05
regarde la page d'aide sur dup/dup2 que je t'ai donnée, soit tu fais un dup précédé d'un close, soit tu fais dup2 qui fait implicitement le close.
Quelques exemples : http://stackoverflow.com/questions [...] up-or-dup2
Marsh Posté le 19-08-2011 à 17:01:53
parfait !
pour retablir l'etat les descripteurs STDIN STDOUT et STDERR,
il suffit pas de refaire les duplications dans le sens inverse !?
par exemple :
close(f1); ou close(0) // f1 etait associer a STDIN_FILENO
dup(STDIN_FILENO);
ou il suffit juste d'un close(f1);
Marsh Posté le 22-08-2011 à 14:15:28
enfin trouvé !
pour ceux que ca peux aider , si vous fermer une entree ou sortie satandard: ex : close(0), pour STDIN_FILENO il n'est pas possible de la reouvrir comme un fichier, elle est ouverte au demarrage du systeme.
pour la conserver , il suffit de la dupliquer avant de la fermer !
ex:
dup(STDIN_FILENO);
close(0); // et surtout pas close(STDIN_FILENO) car vous fermeriez tous les descriteurs vers STDIN_FILENO !
et pour la recuperer une fois le desc 0 utilisé
il suffit de fermer a nouveau le desc 0 et dupliquer STDIN_FILENO
ex:
close(0);
dup(STDIN_FILENO);
voila et merci encore a xilebo !
Marsh Posté le 18-08-2011 à 20:24:53
bonjour a tous,
est il possible de rétablir l'état des descripteurs STDIN_FILENO apres avoir dupliquer son descripteur ?
je ne sais pas si fermé le descripteur dupliquer suffit !
voila, merci a tous ceux qui pourront m'aider ou m'eclairer un peu
Message édité par mdj le 20-08-2011 à 20:26:33