poll() returns even if there is data.

Konstantin Svist fry.kun at gmail.com
Fri Jul 23 07:42:16 UTC 2010


  On 07/22/2010 09:31 PM, Mansuri, Wasim (NSN - IN/Bangalore) wrote:
> 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

Sounds like you want to implement "tail -f" of sorts. If I'm not 
mistaken, you should use inotify for that, instead.




More information about the users mailing list