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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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);
}
Voilà si quelqu'un pourrait m'aiguiller sur comment écrire l'équivalent en C ou m'indiquer qu'est-ce qui est faux !

Merci !