Faire croire à une application qu'elle est dans un tty.

Le
Matthieu Moy
Bonjour,

J'ai un programme dont le comportement diffère entre un execution
classique :

./mon_prg

et une execution redirigée vers un fichier :

./mon_prg > mon_fichier.txt

Ou même vers un autre programme, comme

./mon_prg | cat

En fait, le programme est multithreadé, et étrangement, il y a un
thread qui bufferise completement ses "printf" et pas l'autre, ce qui
fait que dans la sortie redirigée vers le fichier, les lignes sont
entrelacées completement n'importe comment. (Ca commence par la fin,
et ça termine par le début !!)

Je cherche un moyen de faire croire au programme qu'il s'execute dans
un tty, pour qu'il bufferise moins, quitte à perdre un peu en
performances. Un truc qui « trompe » isatty, quoi Je crois me
souvenir qu'il y a un truc, mais lequel ?

(Le tout sous Solaris)

Merci de vos réponses,

--
Matthieu
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Marc Bourguet
Le #453248
Matthieu Moy
Je cherche un moyen de faire croire au programme qu'il s'execute dans
un tty, pour qu'il bufferise moins, quitte à perdre un peu en
performances. Un truc qui « trompe » isatty, quoi ... Je crois me
souvenir qu'il y a un truc, mais lequel ?


Dans l'ordre de complexite et de disponibilite:

* script
* expect
* se faire qqch autour des pseudo-terms qui fait ce qu'on veut

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

DINH Viêt Hoà
Le #453078

En fait, le programme est multithreadé, et étrangement, il y a un
thread qui bufferise completement ses "printf" et pas l'autre, ce qui
fait que dans la sortie redirigée vers le fichier, les lignes sont
entrelacées completement n'importe comment. (Ca commence par la fin,
et ça termine par le début !!)

Je cherche un moyen de faire croire au programme qu'il s'execute dans
un tty, pour qu'il bufferise moins, quitte à perdre un peu en
performances. Un truc qui « trompe » isatty, quoi ... Je crois me
souvenir qu'il y a un truc, mais lequel ?


c'est sans doute une fausse résolution de ton problème.
Connais-tu l'appel fflush() ?
qui permet d'écrire dans le flux de sortie ce qui se trouve dans le
buffer.

--
DINH V. Hoa,

"s/^((\.|[^[]|[(^.|[^^])[^]]*])*)(\[^*[])/1\4/"
-- Stéphane CHAZELAS

Matthieu Moy
Le #452888
DINH Viêt Hoà
c'est sans doute une fausse résolution de ton problème.
Connais-tu l'appel fflush() ?
qui permet d'écrire dans le flux de sortie ce qui se trouve dans le
buffer.


Voui, voui, je connais.

Tu marques un point parce que c'est effectivement une solution propre
au problème.

Seulement, voilà, un coup c'est un vrai printf (écrit par un mec qui a
pas envie de changer son code), un coup c'est un printf cross-compilé
sur un simulateur d'instruction qui réappelle un autre printf, et là,
on ne sait même plus ou mettre le flush.

La solution "script" est crade, mais elle marche et elle plait à
l'utilisateur ;-)


Merce de vos réponses dans tous les cas.

--
Matthieu

JustMe
Le #452887
Matthieu Moy wrote:

DINH Viêt Hoà

c'est sans doute une fausse résolution de ton problème.
Connais-tu l'appel fflush() ?
qui permet d'écrire dans le flux de sortie ce qui se trouve dans le
buffer.



Voui, voui, je connais.

Tu marques un point parce que c'est effectivement une solution propre
au problème.

Seulement, voilà, un coup c'est un vrai printf (écrit par un mec qui a
pas envie de changer son code), un coup c'est un printf cross-compilé
sur un simulateur d'instruction qui réappelle un autre printf, et là,
on ne sait même plus ou mettre le flush.


tu peux aussi mettre au debut du code un buffer stdout tres petit. ca
evite de changer tt le code.

man setbuf ;-)


La solution "script" est crade, mais elle marche et elle plait à
l'utilisateur ;-)


Merce de vos réponses dans tous les cas.




Eclice
Le #454765
Bonjour Jean-Marc,

* se faire qqch autour des pseudo-terms qui fait ce qu'on veut


Je suis un peu parti à la recherche d'infos là-dessus. Je serais très
intéressé par programmer qq. chose autour de ces pseudo-ttys (je désirerais
piloter un logiciel qui tourne avec la librarie ncurses).
Malheureusement, pas trop d'infos du côté de Google (ou alors mots clefs
mal précisés).
Pourriez-vous m'indiquer une source?

Merci par avance,

Cordialement,

Eclice.
--
Ce message a été posté via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr

http://forums.club-internet.fr/

Publicité
Poster une réponse
Anonyme