Когда дочерний процесс разветвляется из родительского процесса, все переменные из родительского процесса копируются в новый дочерний процесс. Следовательно, когда мы открываем общий файл до того, как произойдет разветвление, и пытаемся прочитать один и тот же файл как из родительского, так и из дочернего, оба должны выводить результаты независимо. Но когда я пытаюсь реализовать это, чтение из файла для родителя и дочернего элемента кажется чередующимся. Нужно знать, почему это происходит. Даже файловый дескриптор должен дублироваться, когда новый процесс разветвляется от родителя. Так что же происходит?
#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». Но то, что я вижу, это одно среди дочерних/родительских отпечатков «Привет», а другое - «мир».