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