Question

J'ai un ordinateur (par exemple, l'ordinateur A) chaque fois que l'ordinateur A obtient une connexion via un port telnet particulier, il lance un programme.

ce programme sur l’ordinateur A gère la connexion, l’authentification, etc. Un des travaux qu’il peut effectuer est la réception de fichiers. Il gère cela en lançant gKermit.

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

J'ai un deuxième programme sur l'ordinateur B. Ce deuxième programme se connecte à l'ordinateur A

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

Le processus parent du programme peut maintenant utiliser le descripteur de fichier mPort pour envoyer des données. (c'est-à-dire, comme vous connecter à l'ordinateur A et lui dire de recevoir un fichier)

Le problème est que, lorsque l'ordinateur B lance gKermit pour envoyer un fichier, il ne peut pas communiquer avec l'ordinateur A. gKermit.

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

On pourrait penser que si nous parlons avec mPort, nous pourrions rediriger l'appel système stdio de l'ordinateur B pour utiliser ce mPort en faisant:

dup2(mPort, STDIN_FILENO)

Cependant, cela ne fait pas l'affaire. Toute aide serait la bienvenue.

Était-ce utile?

La solution

Je peux me tromper, mais vous devez rediriger stdout (et peut-être stdin si la communication kermit est bidirectionnelle). Aussi, je suis un peu curieux de savoir quel est le mPort, une pipe? Lis-tu et écris-tu? Vous avez généralement deux descripteurs de fichier, un pour la lecture et un pour l’écriture.

Autres conseils

Merci pour les réponses jpalecek,

Il semble que l'ajout de:

dup2(mPort, STDOUT_FILENO)

permet maintenant à gKermint de communiquer dans les deux sens. Ce qui bien sûr a du sens. pouah

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top