Pregunta

Tengo una computadora (por ejemplo, la computadora A) cada vez que la computadora A se conecta a través de un puerto Telnet particular, inicia un programa.

este programa en la computadora A maneja inicio de sesión, autenticación, etc. Uno de los trabajos que puede hacer es recibir archivos. Maneja esto lanzando gKermit.

/usr/local/bin/gkermit -e 8000 -w -a /location/x/ -ir

Tengo un segundo programa en la computadora B. Este segundo programa se conectará a la computadora A

mPid = forkpty(&mPort, buffer, &mCurrTermattr, NULL);
...
if child
{
    execl("/usr/bin/telnet", "telnet", mComPort.name.c_str(), NULL);
}

ahora el proceso padre del programa puede usar el descriptor de archivo mPort para enviar datos de recepción. (es decir, iniciar sesión en la computadora A y decirle que reciba un archivo)

El problema es que cuando la computadora B inicia gKermit para enviar un archivo, no puede comunicarse con la computadora A gKermit.

system(gkermit -d gkermit.txt -X -e 8000 -i -s testfile.txt)

Uno pensaría que si estamos hablando usando mPort podríamos redirigir la llamada al sistema B de la computadora stdio para usar ese mPort haciendo:

dup2(mPort, STDIN_FILENO)

sin embargo, esto no funciona. Cualquier ayuda sería apreciada.

¿Fue útil?

Solución

Puedo estar equivocado, pero necesita redirigir stdout (y tal vez stdin si la comunicación kermit es bidireccional). Además, tengo un poco de curiosidad, ¿qué es el mPort, una tubería? ¿Lo lees y escribes? Por lo general, tiene dos descriptores de archivo, uno para leer y otro para escribir.

Otros consejos

Gracias por las respuestas jpalecek,

Parece que agregar:

dup2(mPort, STDOUT_FILENO)

ahora permite que gKermint se comunique en ambas direcciones. Lo cual por supuesto tiene sentido. ugh

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