Mat
20-10-2005, 18:32
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 ... ?
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 ... ?