Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

5 réponses
Avatar
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

5 réponses

Avatar
Jean-Marc Bourguet
Matthieu Moy writes:

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

Avatar
DINH Viêt Hoà

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/^((.|[^[]|[(^.|[^^])[^]]*])*)([^*[])/14/"
-- Stéphane CHAZELAS

Avatar
Matthieu Moy
DINH Viêt Hoà writes:

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

Avatar
JustMe
Matthieu Moy wrote:

DINH Viêt Hoà writes:


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.




Avatar
Eclice
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/