Я пытаюсь прочитать определенные строки из файла, используя родительский процесс для чтения одной строки и дочерний процесс для чтения другой строки. В простом текстовом файле содержится следующее: «Это первая строка \ n», Это вторая строка \ n »и т. Д.
Однако я обнаружил, что когда я выполняю свою программу несколько раз, мой ребенок невсегда печатать строку из моего файла. printf («Ввод дочернего \ n») всегда выполняется, что указывает на то, что я могу нормально ввести дочерний процесс.
Почему это работает только иногда?
int main() {
FILE* fptr = fopen("my_text.txt","r");
int stat;
pid_t pid;
int count = 0;
if(fptr != NULL) {
char line[256];
fflush(stdout);
if((pid = fork()) < 0) {
fprintf(stderr, "fork error: %s\n",strerror(errno));
}
else if(pid == 0) {
printf("entering child\n");
int lineNumber = 2; // read the second line
while (fgets(line, sizeof(line), fptr) != NULL) { // loop until we get to desired line
if (count == lineNumber) {
printf("CHILD read: %s", line);
fflush(stdout);
rewind(fptr);
break;
} else {
count++;
}
}
exit(0); // exit child process
} else { // parent process
int lineNumber = 1;
while (fgets(line, sizeof(line), fptr) != NULL) { // loop until desired line
if (count == lineNumber) {
printf("PARENT read: %s", line);
fflush(stdout);
rewind(fptr);
break;
} else {
count++;
}
}
wait(&stat); // reap the child process
}
fclose(fptr);
} else {
printf("File Does not exist\n");
exit(0);
}
return 0; }
Из вышеприведенного кода я иногда печатаю «Это вторая строка» (из родительского) и «Это третья строка» (из дочернего), или иногда только «Это вторая строка». чтобы заставить обоих печатать.