URL: https://linuxfr.org/forums/programmation-c--2/posts/port-s%C3%A9rie-et-enregistrement Title: Port série et enregistrement Authors: Pierre Jacquier Date: 2004年07月24日T17:02:58+02:00 Tags: Score: 0 Bonjour à tous, J'essaye actuellement d'envoyer des messages sur mon port série ttyS0, mais un cat < /dev/ttyS0 ne fait rien apparaitre. Comment cela se fait-il ? Au fait, voila le code du programme : int fd[2]={0,0}; /*Tableau des différents descripeurs de fichiers*/ char * donne_le_port( int portnum) { if (portnum<0 || portnum > 99) return 0; char * port; /*c'est ce pointeur qu'on renverra */ char c[3]; /* pour contenir le numéro (2 chiffres + 1 zéro terminal) */ /* on alloue la mémoire et on se tire la queue basse si ça ne marche pas */ if ((port = (char *)malloc(12*sizeof(char))) == 0) return 0; /* on écrit le numéro en chiffres dans la chaine c */ sprintf(c, "%d", portnum); /* et on revoie la chaîne concaténée correctement (le strcat le plus intérieur concatÃ?ne "/dev/ttyS" avec une chaîne encore vide) */ return strcat(strcat(port, "/dev/ttyS"), c); } int ouvre_port(int i) /*fonction ouvrant le port n°i*/ { fd[i] = open(donne_le_port(i), O_RDWR | O_NOCTTY | O_NDELAY); if (fd[i] == -1) { perror("open_port : incapable d'ouvrir le port"); } /* else fcntl(fd[i], F_SETFL, 0); */ return(fd[i]); } int ecrit_port(int i, char * envoi) /*fonction ecrivant sur le port n°i*/ { int n; n = write(fd[i], envoi,strlen(envoi)); if (n<0) fputs("write() n'a pas marché !\n", stderr); else printf("write a écrit %d caractères (sur %d)\n", n, strlen(envoi)); return (fd[i]); } int main(int argc, char* argv[]) { char * port; if ((port = donne_le_port(atoi(argv[1])))==0) /* on vérifie que portstring a bien réussi (indispensable !) */ { printf("\n *** ERREUR D'ALLOCATION MEMOIRE ! ***\n\n"); return 0; }; /* si oui, c'est bon, port est initialisé comme il faut, on peut s'en servir */ if( ouvre_port(atoi(argv[1])) == -1) printf("dommage\n"); else printf("bien joue\n"); if (ecrit_port(atoi(argv[1]), argv[2]) == -1) printf("envoi raté\n"); else printf("envoi réussi\n"); return 0; } Le programme tourne très bien, m'annonce que j'ai envoyé des données, et rien sur ttyS0 ? (lorsque j'utilise le port 0 ?) Merci beaucoup pour vos réponses Jacouille (qui ne mange pas que des nouilles...)

AltStyle によって変換されたページ (->オリジナル) /