Bonjour,
Pour lancer une connexion Internet à partir d'un modem, j'utilise le programme "chat" qui permet de lancer des commandes sur port série, en fonction des réponses du modem.
Pour l'utiliser, à partir d'une console Bash il faut que je lance le commande :
"stty -F /dev/ttyMODEM speed 9600"
pour configurer le port série, puis
chat -v -f /etc/chatscripts/gprs-signal <> /dev/ttyMODEM >&0
pour que le script chat dialogue avec le modem.
Il s'agit donc d'une redirection Read & Write des entrées/sorties standard de chat vers le port série ttyMODEM.
Les informations sont envoyées sur stderr.
J'aimerai réaliser les mêmes redirections dans un programme C, pour me passer du shell.
Il faut donc que j'effectue les redirections avant de lancer le processus "chat" par execv.
J'ai essayé :
freopen("/dev/ttyMODEM", "w", stdout);
freopen("/dev/ttyMODEM", "r", stdin
char * argv[5];
argv[0] = "chat";
argv[1] = "-v";
argv[2] = "-f";
argv[3] = "/etc/chatscripts/gprs-signal";
argv[4] = (char *) NULL;
execv("/usr/sbin/chat", argv);
perror("execv");
return;
Mais cela ne fonctionne pas.
# parce que execv() lance un shell, non ?
Posté par NeoX . Évalué à 2.
dans ton programme tu fais
hors il me semble qu'en C, la fonction execv() lance un appel systeme qui remplace les infos courantes par une nouvelle
ce qui semble confirmé par la page de man execv()
[^] # Re: parce que execv() lance un shell, non ?
Posté par gaaaaaAab . Évalué à 3.
oui, il faudrait plutôt faire un fork qu'un exec.
ilip, tu peux peut-être t'inspirer de ce que fait rlwrap
# Parce que <> ne fait pas ce que tu crois.
Posté par Batchyx . Évalué à 2.
$ man bash
D'ailleurs, la redirection >&0 devrai t'avoir mis la puce à l'oreille. C'est de la bonne grosse redirection de flux imbitable ce qu'on à là.
# dup2 + fcntl
Posté par ninis666 . Évalué à 1.
C'est sûrement dû au CLOSE-ON-EXEC. Je ne pense pas que tu puisses le manipuler directement en utilisant des FILE *, mais avec des file descriptor ça devrait marcher, comme dans ce bout de code :
[^] # Re: dup2 + fcntl
Posté par ilip . Évalué à 0.
Bonjour
En effet ça marche, c'est ce que je cherchai, merci.
Maintenant je vais essayer de dupliquer la sortie d'erreur du programme chat, pour l'enregistrer dans un fichier.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.