[pipe] Faire une redirection depuis le C
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 :
Code:
1 2
|
~ # rz -b < /dev/ttyGS0 > /dev/ttyGS0 |
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 :
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"
Code:
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);
} |
Voilà si quelqu'un pourrait m'aiguiller sur comment écrire l'équivalent en C ou m'indiquer qu'est-ce qui est faux !
Merci !