* 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