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 :
#include <stdio.h>#include <fcntl.h>#include <unistd.h>intmain(intac,char**av){intinput,output;constchar*modem="/dev/ttyMODEM";constchar*argv[4];input=open(modem,O_RDONLY);if(input<0){fprintf(stderr,"Can't open <%s> for reading: %m\n",modem);return1;}output=open(modem,O_WRONLY);if(output<0){fprintf(stderr,"Can't open <%s> for writing: %m\n",modem);return1;}if(fcntl(input,F_SETFD,0)<0){fprintf(stderr,"Failed to clear close-on-exec flag in input: %m\n");return1;}if(fcntl(output,F_SETFD,0)<0){fprintf(stderr,"Failed to clear close-on-exec flag in output: %m\n");return1;}if(dup2(input,STDIN_FILENO)<0){fprintf(stderr,"Cant set input: %m\n");return1;}if(dup2(output,STDOUT_FILENO)<0){fprintf(stderr,"Cant set output: %m\n");return1;}close(input);close(output);argv[0]="/usr/sbin/chat";argv[1]="-v";argv[2]="-f";argv[3]=NULL;if(execv(argv[0],argv)<0){fprintf(stderr,"Failed to execv(%s, %s, %s): %m\n",argv[0],argv[1],argv[2]);return1;}return0;}
# dup2 + fcntl
Posté par ninis666 . En réponse au message Lancer le programme 'chat' sur un port série. É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 :