stdin, stdout und stderr werden zwischen geteilt?

Ich versuche das Verhalten der drei Streams zu verstehen -stdout, stdin undstderr. Ich konnte die Antwort aus keinem Lehrbuch bekommen, also bin ich hergekommen.

Ich weiß, dass diese drei in der Dateideskriptortabelle mit den Dateideskriptoren 0 (stdin), 1 (stdout) und 2 (stderr) gespeichert sind. Mir ist auch bewusst, dass es sich nicht nur um Dateideskriptoren handelt, sondern um E / A-Streams, die umgeleitet werden können. Ok, wie wäre es mit Teilen?

Betrachten Sie die drei Fälle:

Wenn eine fork () als @ bezeichnet wi: Der untergeordnete Prozess und der übergeordnete Prozess verwenden gemeinsam Dateideskriptoren. Haben sie jedoch die gleichen Werte für stdin, stdout und stderr?Wenn ein Thread erstellt wird: Threads geben Dateideskriptoren frei, aber E / A-Streams?Wenn execl () heißt: In diesem Fall wird das aktuelle Prozessabbild mit dem neuen Prozessabbild überschrieben. Wenn ich macheexecl("./a.out", "a.out", NULL);, wird diese neue ausführbare Datei dann eine neue Kopie von stdin, stderr und stdout erhalten?

Alle weisen Antworten sind willkommen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage