Re: Fragen zu "stderr"

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Mon, 29 Oct 2007 14:58:13 +0100 (CET)

Marc Santhoff wrote:
> Tatsächlich ist es ein TTY, kann aber durchaus auch in eine Textdatei
> umgeleitet werden. Und ich weiß nicht genau, auf welche Art (manuell,
> durch ein CGI etwa) das Programm gestartet wurde. Also heißt das für
> mich, es ist erstmal unsicher, in welchem Modus der Kanal arbeitet und
> ich muß prüfen und ggf. umschalten.

Ja, wenn Du sicher sein willst. In der Praxis ist das in
den meisten Fällen aber eher irrelevant.

> Meine Frage reduziert sich dann auf einen anderen Aspekt:
> Mir wurde geraten, ich solle stderr erstmal schließen und neu öffnen
> (was ich nun als unnötig ansehe), wie mache ich denn das?

Da solltest Du denjenigen, der Dir das geraten hat, nochmal
fragen, wie Du das machen sollst, und wozu das genau gut
sein soll. Das erschließt sich mir nämlich nicht. Wie
Bernd schon schrieb: Wenn Du nicht genau weißt, was Dein
stderr ist, dann kannst Du's nicht neu öffnen. Wenn Du
dagegen z.B. genau weißt, dass es eine bestimmte Datei ist,
dann kannst Du sie natürlich neu öffnen.

Das einzige, was einem generischen Neu-Öffnen von stderr
nahekäme, wäre sowas wie dup2(dup(2), 2); was zwar schon
fast reif für einen Obfuscated-C-Contest wäre, aber anson-
sten auch keinen erkennbaren Nutzen hat. Wenn mich nicht
alles täuscht, ist das ein NOP.

> Wenn ich stderr schließe, habe ich doch kein "handle" mehr,
> gibt es eine Methode, den vom System übergebenen Kanal neu
> anzuschließen?

Nein. Sobald die letzte Referenz auf einen Descriptor
ge- schlossen wird, bekommt die andere Seite ja ein EOF
mitgeteilt, was z.B. im Falle von FIFOs, Netzwerksockets
u.ä. Nebenwirkungen hat, nämlich dass die Gegenseite ihre
Verbindung i.allg. ebenfalls zumacht. Und wie gesagt:
Du kannst so ohne weiteres gar nicht wissen, was überhaupt
am anderen Ende des Descriptors ist. Von einer einfachen
Datei über ein TTY, eine Pipe oder named FIFO bis hin zu
einem Netzwerk-Socket kann das alles mögliche sein.

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
"The last good thing written in C was
Franz Schubert's Symphony number 9."
        -- Erwin Dieterich
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 29 Oct 2007 - 15:00:23 CET

search this site