Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1721 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Exercice système

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exercice système

n°2096105
mdj
Posté le 18-08-2011 à 20:24:53  profilanswer
 

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
mood
Publicité
Posté le 18-08-2011 à 20:24:53  profilanswer
 

n°2096106
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 18-08-2011 à 20:28:29  profilanswer
 

Oui mais non. Ici, on t'aidera sûrement, mais faire ton boulot à ta place ? Certainement pas.


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°2096107
mdj
Posté le 18-08-2011 à 20:38:57  profilanswer
 

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 !

n°2096265
xilebo
noone
Posté le 19-08-2011 à 10:29:18  profilanswer
 

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é.
 

n°2096401
mdj
Posté le 19-08-2011 à 15:56:25  profilanswer
 


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

n°2096403
xilebo
noone
Posté le 19-08-2011 à 16:14:05  profilanswer
 

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
 
 
 

n°2096417
mdj
Posté le 19-08-2011 à 17:01:53  profilanswer
 

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);


Message édité par mdj le 19-08-2011 à 17:14:08
n°2096708
mdj
Posté le 22-08-2011 à 14:15:28  profilanswer
 

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 !


Message édité par mdj le 22-08-2011 à 14:17:41

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Exercice système

 

Sujets relatifs
... pour modéliser mon système.Exercice structure langage c
Probleme fsolve MATLAB : résolution système de 4 équationsAider Moi sur Un Exercice En Language C svp
Problème mis en place d'un système de paiement CBexercice d'analyse
[PHP] Problème système parrainageExercice de programmation shell
Détecter le système d'exploitation sur lequel tourne le programme.quand faut il ferme une socket systeme
Plus de sujets relatifs à : Exercice système


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR