* Fw: select(), EOF... @ 2001-08-20 20:38 Carlos Fernández Sanz 2001-08-20 20:45 ` Ignacio Vazquez-Abrams 0 siblings, 1 reply; 6+ messages in thread From: Carlos Fernández Sanz @ 2001-08-20 20:38 UTC (permalink / raw) To: linux-kernel (sorry if this is a dupe, I haven't seen it come from the list, so I'm resending as plain ASCII in case majordomo kills messages with strange stuff) Hi, I need to do something similar to tail -f. I was hoping that select() or poll() would block my process after reaching EOF but (as the man says) EOF doesn't cause read() to block so select() and poll() both say I can read. The result is (obviously) that my program waits actively and uses all the CPU. What's the right way of doing this? I assume the kernel provides facilities to find out if there is new data to read (other than EOF). Thanks. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Fw: select(), EOF... 2001-08-20 20:38 Fw: select(), EOF Carlos Fernández Sanz @ 2001-08-20 20:45 ` Ignacio Vazquez-Abrams 2001-08-20 20:56 ` Carlos Fernández Sanz 0 siblings, 1 reply; 6+ messages in thread From: Ignacio Vazquez-Abrams @ 2001-08-20 20:45 UTC (permalink / raw) To: linux-kernel On Mon, 20 Aug 2001, Carlos Fernández Sanz wrote: > (sorry if this is a dupe, I haven't seen it come from the list, so I'm > resending as plain ASCII in case majordomo kills messages with strange > stuff) > > Hi, > > I need to do something similar to tail -f. > I was hoping that select() or poll() would block my process after reaching > EOF but (as the man says) EOF doesn't cause read() to block so select() and > poll() both say I can read. The result is (obviously) that my program waits > actively and uses all the CPU. > What's the right way of doing this? I assume the kernel provides facilities > to find out if there is new data to read (other than EOF). > > Thanks. tail -f just alternates between open() and close(), keeping in memory the current byte offest into the file. -- Ignacio Vazquez-Abrams <ignacio@openservices.net> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Fw: select(), EOF... 2001-08-20 20:45 ` Ignacio Vazquez-Abrams @ 2001-08-20 20:56 ` Carlos Fernández Sanz 2001-08-20 21:00 ` Ignacio Vazquez-Abrams 0 siblings, 1 reply; 6+ messages in thread From: Carlos Fernández Sanz @ 2001-08-20 20:56 UTC (permalink / raw) To: Ignacio Vazquez-Abrams, linux-kernel How come the process is never runnable unless there's new data in the file? If it was opening and closing the file continously it would be using lots of CPU, while it's 0 if there's no data coming. ----- Original Message ----- From: "Ignacio Vazquez-Abrams" <ignacio@openservices.net> To: <linux-kernel@vger.kernel.org> Sent: Monday, August 20, 2001 10:45 PM Subject: Re: Fw: select(), EOF... > On Mon, 20 Aug 2001, Carlos Fernández Sanz wrote: > > > (sorry if this is a dupe, I haven't seen it come from the list, so I'm > > resending as plain ASCII in case majordomo kills messages with strange > > stuff) > > > > Hi, > > > > I need to do something similar to tail -f. > > I was hoping that select() or poll() would block my process after reaching > > EOF but (as the man says) EOF doesn't cause read() to block so select() and > > poll() both say I can read. The result is (obviously) that my program waits > > actively and uses all the CPU. > > What's the right way of doing this? I assume the kernel provides facilities > > to find out if there is new data to read (other than EOF). > > > > Thanks. > > tail -f just alternates between open() and close(), keeping in memory the > current byte offest into the file. > > -- > Ignacio Vazquez-Abrams <ignacio@openservices.net> > > - > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Fw: select(), EOF... 2001-08-20 20:56 ` Carlos Fernández Sanz @ 2001-08-20 21:00 ` Ignacio Vazquez-Abrams 2001-08-20 21:09 ` Carlos Fernández Sanz 0 siblings, 1 reply; 6+ messages in thread From: Ignacio Vazquez-Abrams @ 2001-08-20 21:00 UTC (permalink / raw) To: Carlos Fernández Sanz; +Cc: linux-kernel On Mon, 20 Aug 2001, Carlos Fernández Sanz wrote: > How come the process is never runnable unless there's new data in the file? > If it was opening and closing the file continously it would be using lots of > CPU, while it's 0 if there's no data coming. It sleep()s between close() and open(). -- Ignacio Vazquez-Abrams <ignacio@openservices.net> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Fw: select(), EOF... 2001-08-20 21:00 ` Ignacio Vazquez-Abrams @ 2001-08-20 21:09 ` Carlos Fernández Sanz 2001-08-20 21:29 ` Ignacio Vazquez-Abrams 0 siblings, 1 reply; 6+ messages in thread From: Carlos Fernández Sanz @ 2001-08-20 21:09 UTC (permalink / raw) To: Ignacio Vazquez-Abrams, Carlos Fernández Sanz; +Cc: linux-kernel a strace shows it works differently nanosleep({1, 0}, {1, 0}) = 0 fstat(3, {st_mode=S_IFREG|0600, st_size=227128, ...}) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [RT_0], 8) = 0 rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0 rt_sigprocmask(SIG_SETMASK, [RT_0], NULL, 8) = 0 the file is opened just once (as I expected), and tail sleeps in nanosleep () until the file grows. I think strace isn't showing more nanosleep() as it should be looping there. BTW what's the reason for the sigprocmask, etc? ----- Original Message ----- From: "Ignacio Vazquez-Abrams" <ignacio@openservices.net> To: "Carlos Fernández Sanz" <cfs-lk@fulanito.nisupu.com> Cc: <linux-kernel@vger.kernel.org> Sent: Monday, August 20, 2001 11:00 PM Subject: Re: Fw: select(), EOF... > On Mon, 20 Aug 2001, Carlos Fernández Sanz wrote: > > > How come the process is never runnable unless there's new data in the file? > > If it was opening and closing the file continously it would be using lots of > > CPU, while it's 0 if there's no data coming. > > It sleep()s between close() and open(). > > -- > Ignacio Vazquez-Abrams <ignacio@openservices.net> > > - > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Fw: select(), EOF... 2001-08-20 21:09 ` Carlos Fernández Sanz @ 2001-08-20 21:29 ` Ignacio Vazquez-Abrams 0 siblings, 0 replies; 6+ messages in thread From: Ignacio Vazquez-Abrams @ 2001-08-20 21:29 UTC (permalink / raw) To: linux-kernel On Mon, 20 Aug 2001, Carlos Fernández Sanz wrote: > a strace shows it works differently > > nanosleep({1, 0}, {1, 0}) = 0 > fstat(3, {st_mode=S_IFREG|0600, st_size=227128, ...}) = 0 > rt_sigprocmask(SIG_BLOCK, [CHLD], [RT_0], 8) = 0 > rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0 > rt_sigprocmask(SIG_SETMASK, [RT_0], NULL, 8) = 0 > > the file is opened just once (as I expected), and tail sleeps in nanosleep > () until the file grows. I think strace isn't showing more nanosleep() as it > should be looping there. BTW what's the reason for the sigprocmask, etc? Huh. You're right. It seems that tail has changed since I last looked at the source. Now it uses stat() instead. However, tail in textutils 2.0.11 still calls sleep(). I don't know how sleep() is implemented, but it's not impossible for it to use nanosleep() and signals. I believe I read something about SIGALRM... -- Ignacio Vazquez-Abrams <ignacio@openservices.net> ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2001-08-20 21:29 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2001-08-20 20:38 Fw: select(), EOF Carlos Fernández Sanz 2001-08-20 20:45 ` Ignacio Vazquez-Abrams 2001-08-20 20:56 ` Carlos Fernández Sanz 2001-08-20 21:00 ` Ignacio Vazquez-Abrams 2001-08-20 21:09 ` Carlos Fernández Sanz 2001-08-20 21:29 ` Ignacio Vazquez-Abrams
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox