Pregunta

Tengo que crear un nuevo par de TTY (maestro y esclavo) sin usar Forkpty ().

En el hombre de los pts (4), está escrito que:

Cuando se abre un proceso /dev /ptmx, obtiene un descriptor de archivo para un maestro pseudo-terminal (PTM), y un dispositivo de esclavo pseudo-terminal (PTS) se crea en el directorio /dev /pts.

Con un pequeño programa en C, abro /dev /ptmx como ese:

open("/dev/ptmx", O_RDWR);

Pero no hay un nuevo Pty creado en/dev/pts/.

¿Fue útil?

Solución

Para crear realmente un par Pty utilizable, también debe llamar a Grantpt (3) y desbloquear (3) en el FD devuelto por la llamada abierta. No está bien definido exactamente en qué lugar en ese proceso se crea el nodo de archivo Pty Slave real en el sistema de archivos: algunos sistemas (aquellos en los que /dev /pts son un sistema de archivos especial, generalmente) lo crearán en la apertura, mientras que otros crearán Es como parte de la llamada Grantpt o Unlockpt. Tampoco se guarde que el esclavo esté en /dev /pts, podría estar en otro lugar, por lo que debe llamar a PTSName (3) para averiguar dónde está.

También puede ser un poco más portátil llamar a POSIX_OPENPT (3) en lugar de abrir directamente.

Otros consejos

Aquí hay un buen tutorial sobre el tema:Uso de pseudominales para controlar programas interactivos, PTY, PDIP

Particularmente, mire la fuente de muestra en la mitad de la página, bajo el título de "Comunicación entre procesos a través de un pseudo terminal". Ese es un ejemplo de un proceso que se desembolsa, luego los dos procesos se comunican a cada uno a través de un PTY el proceso principal que se abrió anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top