Bonjour,
Dans un programme en C, je souhaite rediriger les E/S d'un programme(par exemple ftp) vers deux tubes(nommé ou non), un pour l'entrée et un pour la sortie.
Quand je redirige uniquement STDOUT, les sorties dans le tube se font correctement.
Mais si je redirige aussi STDIN, ce n'est plus le cas, les sorties n'apparaissent alors qu'à la terminaison du programme, et sans les prompts.
Apparament ça viens du fait que STDIN n'est pas un TTY, je souhaiterait savoir si il ya un moyen de faire croire au programme que STDIN est un TTY, ou alors de régler ce problème autrement(même en shell si nécéssaire).
Merci.
A+
# Mouais
Posté par Ph Husson (site web personnel) . Évalué à 1.
Parce que linux n'envoit les données qu'a la reception d'un \n, donc si t'as tout sur une seule ligne ben voila.....
[^] # Re: Mouais
Posté par doublehp (site web personnel) . Évalué à 0.
Tu peut essayer le mode raw, ou le mode nonbufferise
Dans un de mes codes, je fais ca sur le terminal :
tcgetattr (STDIN_FILENO, &term);
term.c_lflag &= ~(ICANON | ECHO);
tcsetattr (STDIN_FILENO, TCSANOW, &term);
ce qui me permet de passer en mode instantane.
le pb peut aussi venire de la maniere dont tu redirige ton entree ... c est un herescript ?
donne donc des exemples qui marchent ET qui marchent pas ...
Enfin, n oublie jamais que UNIX gere lui meme les buffers I/O ... parfois les comit arrivent au moment ou tu ne t y attends pas ... parfois sur un newline, parfois sur un EOF, parfois a chaque scheduling ...
# man ptmx
Posté par Antoine Büsch . Évalué à 1.
# stdin, stdout, stderr
Posté par gerald dumas . Évalué à 1.
# pseudo terminaux
Posté par karm . Évalué à 1.
reagarde du cote des fonctions :
int getpt(void);
int getrantpt(int descripteur);
int unlockpt(int descripteur);
char * ptsname(int descripteur);
infos trouvé dans "Programmtion sytème en C sous Linux" p862 chapitre 33 gestion du terminale C Blaess
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.