[C] redirection gauche

redirection gauche [C] - C - Programmation

Marsh Posté le 08-03-2014 à 22:06:14    

bon voilà je viens vers vous car j'ai une redirection gauche a coder en c pour mon projet minishell
 
j'ai tenté plusieurs trucs mais quand j'execute mon shell et je teste cat < file le cat bloque le read du file fichier et le processus apparement donc je en sais pas comment écrire dans le cat
 
je voulais savoir globalement comment faire un read et un write pendant que le processus de cat est lancé si je dois faire un pipe ou pas ?
 
merci

Reply

Marsh Posté le 08-03-2014 à 22:06:14   

Reply

Marsh Posté le 08-03-2014 à 22:18:43    

Bonjour !
 
Votre question n'est pas super claire, je ne suis pas certain d'avoir tout compris :)
 
Pour les redirections, classiquement on ouvre le fichier et on change l'entrée / la sortie / l'erreur standard avec les fonctions dup ou dup2.
 
Le pipe n'est utilisé que pour coder le '|' du shell, le pipe étant créé avant le "fork", chaque processus ferme l'extrémité du pipe qu'il n'utilise pas et redirige l'entrée ou la sortie standard avec dup/dup2.
 
Bonne continuation !

Reply

Marsh Posté le 08-03-2014 à 22:25:10    

ok bah merci parce que j'ai codé les redirections droites avec un pipe, je vais voir comment faire sans mais ca me semble plus logique en effet.

Reply

Marsh Posté le 08-03-2014 à 22:53:51    

en y refléchissant, je comprend pas la logique
 
dans la redirection droite par exemple : cat Makefile > file
 
j'execute cat ce qui va terminer le processus donc si je fais un dup2 sans faire le pipe, dup2 ne pourra rien copier puisque les I/O seront fermés...
 
il doit y avoir un truc que je n'ai pas compris

Reply

Marsh Posté le 08-03-2014 à 23:05:25    

Ma vision, pour exécuter cette commande :  
 
Vous ouvrez le fichier "file" en écriture, vous sauvegardez la sortie standard, vous fermez la sortie standard et la branchez sur le fd de file avec dup.
 
Vous exécutez le "cat Makefile" comme si il n'y avait pas de redirection,
 
Vous fermez la sortie standard redirigée sur "file", puis restaurez la "vraie" sortie standard que vous aviez sauvegardée au tout début.
 
Et, logiquement, cela fait ce que vous attendez.
 
Ou alors, j'ai tout oublié de ce que j'avais appris sur ces manipulations (cela fait plus de 20 ans que je ne les pratique plus trop :) )
 
Bonne continuation !

Reply

Marsh Posté le 08-03-2014 à 23:12:37    

Merci bien !
 
Je vais essayer de faire ca demain là j'ai trop chercher dans tous les sens je suis ko
 
Bonne continuation .

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed