Marc Santhoff wrote:
> ich habe hier ein Programm, das so heftig nach "stderr" schreibt, daß
> der Kanal nicht mehr aufnahmefähig ist. Dann gibt es einen Fehler
> [EAGAIN], also non-blocking-i/o. Ich hätte gefühlsmäßig eher mit
> blockierendem Verhalten gerechnet.
>
> Ist das unter FreeBSD die Standardeinstellung? Und wie verhält es sich
> mit den verschiedenen Systemversionen (hier 4.11 und 6/7-STABLE)?
Das hat erstmal nichts direkt mit stderr zu tun, denn
stderr ist ja erstmal ein Filedescriptor wie jeder andere
auch, nur dass er aus Konvention für spezielle Dinge
verwendet wird.
Entscheidend ist, was für eine Art Descriptor stderr in
Deinem Fall ist: Ist es ein tty, eine Pipe, eine einfache
Datei, ...? Bei einer einfachen Datei z.B. ist blockie-
rendes Verhalten die Standardeinstellung, sofern das
betreffende Programm nicht selbst auf non-blocking I/O
umschaltet.
Wie gesagt, das verhält sich bei stderr eigentlich nicht
anders als bei jedem anderen Descriptor.
> Weiter ist interessant wäre, wie ich vorher ermittle, welche Einstellung
> für ein "file handle" gültig ist. Das wird aber sicher im Stevens zu
> finden sein ...
#include <stdio.h>
#include <fcntl.h>
fcntl(fileno(stderr), F_GETFL) & O_NONBLOCK
Oder, etwas weniger portabel:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
fcntl(STDERR_FILENO, F_GETFL) & O_NONBLOCK
Gruß
Olli
-- Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M. Handelsregister: Registergericht Muenchen, HRA 74606, Geschäftsfuehrung: secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün- chen, HRB 125758, Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart FreeBSD-Dienstleistungen, -Produkte und mehr: http://www.secnetix.de/bsd "Perl will consistently give you what you want, unless what you want is consistency." -- Larry Wall To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Fri 26 Oct 2007 - 16:16:38 CEST