Re: select() auf Dateien

From: Oliver Fromme <olli(at)secnetix.de>
Date: Mon, 25 Mar 2002 09:41:21 +0100 (CET)

Udo Erdelhoff <ue(at)nathan.ruhr.de> wrote:
> [...]
> Ich habe dann mal einen Blick in tail.c geworfen, und der nutzt die
> Kernel Event Queue (in -current), oder Signale, oder Polling. Da das
> Programm aber sowohl auf FreeBSD als auch auf Solaris 2.6/8 laufen
> soll, schrecke ich davor etwas zurück... der Tannenbaum-Spruch hat
> seinen Hintergrund.

select() liefert bei EOF den betreffenden Descriptor immer
als lesbar zurück, denn ein read() würde ja an der Stelle
nicht blockieren, sondern 0 liefern (== EOF).

Die einzige portable Möglichkeit, am EOF auf weitere Daten
zu warten, ist (leider!) tatsächlich, die Datei zu pollen,
d.h. zu schlafen und in regelmäßigen Zeitintervallen nach-
zuschauen, ob was dazugekommen ist. Genau so hat es auch
tail(1) gemacht, bevor es das kqueue-Interface (welches
aber natürlich leider nicht portabel ist).

> Meine Frage ist jetzt: Habe ich einen Fehler in meiner Implementierung
> (die Beschreibung von num_fd ist nicht so ganz eindeutig) oder bin ich
> völlig auf dem Holzweg?

num_fd ist schon eindeutig, das sind halt die ersten x
Descriptoren in der Menge, die sich select anschaut.
Wenn Dich nur ein Descriptor n interessiert, kannst Du
num_fd auf n+1 setzen. Hat aber mit der EOF-Problematik
nichts zu tun.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"All that we see or seem is just a dream within a dream" (E. A. Poe)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 25 Mar 2002 - 09:41:23 CET

search this site