Когда дочерний процесс разветвляется от родительского процесса, все переменные родительского процесса копируются в новый дочерний процесс. Следовательно, когда мы открываем общий файл до того, как произойдет разветвление, и пытаемся прочитать один и тот же файл как из родительского, так и из дочернего элементов, оба должны вывести результаты независимо. Но когда я пытаюсь реализовать это, чтение из файла для родителя и ребенка, кажется, чередуется. Нужно знать, почему это происходит. Даже файловый дескриптор должен дублироваться, когда новый процесс разветвляется от родителя. Так что же не так?
#include<stdio.h>
#include<fcntl.h>
main()
{
int fp;
char buff[11];
int pid;
fp = open("file1.txt", O_RDONLY);
pid = fork();
if(pid==0)
{
printf("Child begins %d\n", getpid());
read(fp, buff, 5);
buff[10] = '\0';
printf("Child read:");
puts(buff);
printf("Child exiting\n");
}
else
{
read(fp, buff, 5);
buff[10] = '\0';
printf("Parent read:");
puts(buff);
printf("Parent exiting\n");
}
}
Теперь предположим, что file1.txt содержит содержимое «Hello world», тогда и родительский, и дочерний процессы должны были напечатать «Hello». Но то, что я вижу, это один из отпечатков дочерних / родительских «Hello», а другой - «world».