offene fd's in prozessen ?
-
Hallo ich habe ein Verständnisproblem:
wenn ich ein file öffne und danach einen neuen prozess forke...
und in diesem kindprozess dann auf den dateideskriptor zugreife .....
müsste das nicht fehlschlagen ? Aber mit folgendem code:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> extern char **environ; int main(int argc, char **argv) { pid_t child1; FILE *file; file = fopen("file.txt","r"); int fd; while(1) { switch(child1=fork()) { case -1 : printf("Error at fork()..........\n"); exit(0); case 0 : printf("\nCHILD PROCESS\n"); fd = fileno(file); printf("This is the access try to the file deskriptorbefore invoking fork():->%d",fd); exit(1); default : printf("\nPARENT PROCESS\n"); exit(2); } } return 0; }
kann ich locker auf den fd zugreifen?
Warum ?
Ich dachte mit dem neuen Prozess wird der gesamte stackinhalt vom urspurungsprozess durch den kindprozess überschrieben ... ?
-
Eben nicht, weil alle Filedeskriptoren beim forken kopiert werden. Eltern und Kind haben dann beide Zugriff auf Datei.
-
Da der Prozess beim fork im Speicher geklont wird (ok, mit COW funktioniert das nicht mehr so, aber für die Vorstellung), werden eben auch bereits alles erstellten Variablen und der Stack kopiert. Die Filedeskriptortabelle im Kernel wird natürlich auch mit kopiert.