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

Utilisation de pseudo-terminaux

2 réponses
Avatar
Khanh-Dang
Bonjour,

j'avais l'habitude d'utiliser les pseudo-terminaux à la façon BSD, pour
relier deux programmes. Le programme maître (en l'occurence slattach,
mais ça n'a pas d'importance) ouvrait /dev/ptyp0, tandis que le
programme esclave (un autre programme) ouvrait le fichier correspondant,
/dev/ttyp0.

Je me trouve maintenant sur un système Linux sur lequel
CONFIG_LEGACY_PTY_COUNT est mis à 0, c'est-à-dire que /dev/tty* et
/dev/pty* n'existent plus. Si je pouvais modifier les programmes, il me
semble qu'il me suffirait de récrire le programme maître en utilisant
l'interface Unix98 des pseudo-terminaux : open() sur /dev/ptmx,
grantpt() et unlockpt(). Puis j'utiliserais ptsname() pour avoir le nom
du pseudo-terminal esclave que le programme esclave devra utiliser.

Je cherche cependant une solution qui ne nécessite pas de modifier le
programme maître. Malheureusement, sous Linux, si on se contente
d'ouvrir /dev/ptmx sans appeler unlockpt() - ce qui ne serait pas
conforme POSIX -, l'esclave obtient un "Input/Output Error" lors de
l'ouverture du fichier /dev/pts/* correspondant.

Est-ce que je dois vraiment regretter l'absence des /dev/[pt]ty* ou bien
existe-t-il une solution simple ne nécessitant pas de modifier les
programmes ?

2 réponses

Avatar
Khanh-Dang
Le lundi 15 juin 2009, Khanh-Dang a écrit :
Est-ce que je dois vraiment regretter l'absence des /dev/[pt]ty* ou bien
existe-t-il une solution simple ne nécessitant pas de modifier les
programmes ?



La nuit portant conseil, j'ai finalement écrit un wrapper à l'appel
open() qui appelle automatiquement grantpt() et unlockpt(), si le
fichier à ouvrir est /dev/ptmx. Je compile alors le wrapper dans
~/local/lib/libwrapptmx.so puis je lance le programme maître (ici
slattach) avec :

$ export LD_LIBRARY_PATH=~/local/lib
$ LD_PRELOAD=libwrapptmx.so /usr/bin/slattach

Et hop, ça marche !

Je suis toujours preneur s'il existe une solution plus élégante.
Avatar
Khanh-Dang
Le lundi 15 juin 2009, Khanh-Dang a écrit :
Est-ce que je dois vraiment regretter l'absence des /dev/[pt]ty* ou bien
existe-t-il une solution simple ne nécessitant pas de modifier les
programmes ?



La nuit portant conseil, j'ai finalement écrit un wrapper à l'appel
open() qui appelle automatiquement grantpt() et unlockpt(), si le
fichier à ouvrir est /dev/ptmx. Je compile alors le wrapper dans
~/local/lib/libwrapptmx.so puis je lance le programme maître (ici
slattach) avec :

$ export LD_LIBRARY_PATH=~/local/lib
$ LD_PRELOAD=libwrapptmx.so /usr/bin/slattach -p slip /dev/ptmx

Et hop, ça marche !

Je suis toujours preneur s'il existe une solution plus élégante.