poll() returns even if there is data.

Mansuri, Wasim (NSN - IN/Bangalore) wasim.mansuri at nsn.com
Fri Jul 23 04:31:59 UTC 2010


I am trying to read some file using open and read system calls. 

Here in my code I am doing open than poll and if poll returns with the event POLLIN than read. 
Even if poll returns with the event POLLIN read returns 0, that means no data. 

My question here is, 
	Am I using poll() properly?
	can we use poll to read the files like I am reading?
	If we can not use poll than is there any other way using which I can get to know if there is some data in the file after I did last read()?

I am pasting code snip below. 
	
 if((fd = open(fileName,O_RDONLY))==-1){
            printf("File opened Failed errno=%d\n",errno);
            return (0);
    }   

    loc = lseek(fd,0,SEEK_END);

    fds[0].fd = fd; 
    fds[0].events = POLLIN;
    fds[0].revents = 0;

    while(1){
        ret = poll(fds,1,timeout);
        printf("poll returned with ret = %d, events = %d, revents=%d, errno =%d \n",ret,fds[0].events,fds[0].revents,errno);
        if(fds[0].revents){
            if((bytRcvd = read(fd,buff,1024))>0){
                printf("%s",buff);
            }
            else{
                printf("Read Failed on %s with retValue = %d Errno = %d \n",fileName, bytRcvd, errno);
                sleep(2);
            }
        }
    }   

Above code always throws following output.

poll returned with ret = 1, events = 1, revents=1, errno =0 
Read Failed on /var/log/messages with retValue = 0 Errno = 0 


More information about the users mailing list