Salve a tutti,ho scritto un programmi in linguaggio c, per comunicare con un dispositivo collegato tramite seriale, il problema è che non capisco perchè, ma la funzione fcntl(fd,F_SETFL,O_NDELAY) , non mi restituisce mai niente, anche se sulla seriale c'è attaccato un dispositivo che invia dati alla porta e di questo ne sono sicuro.
Non è che forse la funzione fcntl(fd,F_SETFL,O_NDELAY) non è adatta a leggere?
Comunque il S.O. è Xubuntu.
Qui vi posto il codice che ho scritto:
Grazie a tutti!!!codice:#include<stdio.h> #include<string.h> #include<unistd.h> #include<fcntl.h> #include<errno.h> #include<termios.h> #include<iostream> using namespace std; int main(){ int fd, scelta,num,result; fd=open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); cout<<"fd "<<fd<<"\n"; if(fd==-1){ perror("open_port:Unable to open /devttySO -"); } //setto la seriale: struct termios options; tcgetattr(fd , &options); cfsetispeed(&options , B19200); cfsetospeed(&options , B19200); options.c_cflag |= (CLOCAL| CREAD); //SETTO 8N1 options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; //setto il modo di far vedere l'input options.c_lflag |= (ICANON | ECHO | ECHOE ); //setting input parity options options.c_iflag |=(INPCK|ISTRIP); //setto il modo XON-XOFF options.c_iflag |=(IXON| IXOFF|IXANY); tcsetattr(fd,TCSANOW,&options); do{ num=0; do{ result=fcntl(fd,F_SETFL,O_NDELAY); if(result!=0){ cout<<result; } num++; }while(num!=40000000); cout<<"\nDammi la scelta!:"; cin>>scelta; }while(scelta!=0); close (fd); return 0; }

Rispondi quotando