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:
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;
}
Grazie a tutti!!!