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!!!