Bonjour,
Je dois implementer un fonction ZModem avec la command (l)rs/z. Cependant, comme nous n'utilisons pas le port série par défaut, nous devons faire une redirection. Cela fonctionne plutôt bien dans un shell :
Cependant, je dois faire ceci depuis un code C est j'ai quelque soucis pour me sortir du "pipe hell" et cela ne marche pas car je fais les choses faux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2~ # rz -b < /dev/ttyGS0 > /dev/ttyGS0
PS : Le processus à été forké au préalable et le processus parent doit "killer" la commande rz si un timeout est atteint. Le port série a été ouvert au préalable et son file descriptor et dans "serialFD"
Voilà si quelqu'un pourrait m'aiguiller sur comment écrire l'équivalent en C ou m'indiquer qu'est-ce qui est faux !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 void UpdateAgent::doZmodemCommand(){ char* zmodemCmd = "/usr/local/bin/rz"; // The ZModem command char *zmodemArgs[] = {zmodemCmd, "-b", (char *) 0 };// Zmodem args #ifdef DEBUG cout << "ZModem command is " << zmodemCmd << endl; #endif // Give serial in/out as stdr in/our for rz if(dup2(0, serialFD) < 0){ perror("Couldn't dup2 !"); exit(-1); } if(dup2(1, serialFD) < 0){ perror("Couldn't dup2 !"); exit(-1); } if(execv(zmodemCmd, zmodemArgs) < 0){ perror("Couldn't execv ZModem command !"); exit(-1); } // Child exits here exit(0); }
Merci !
Partager