Я пытаюсь открыть файл с помощью fopen, разветвить текущий процесс и заставить дочерний процесс записать что-нибудь в файл; когда дочерний процесс завершается, родительский процесс должен прочитать содержимое файла, но он читает «ноль», даже если файл был правильно записан. Об ошибках не сообщается.
Вот мой код:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(int argc, char *argv[]){
FILE * sharedFile;
char *fileContent;
if((sharedFile = fopen("testFile.txt","w+")) == NULL){
fprintf(stderr,"Error while opening the file: %s",strerror(errno));
return 0;
}
pid_t pid = fork();
if(pid == 0){
//Child
fprintf(sharedFile,"%s",argv[1]);
exit(0);
}
else{
//Parent
wait(NULL);
if(fscanf(sharedFile,"%s",fileContent) < 0){
fprintf(stderr,"Error while reading file: %s",strerror(errno));
return 0;
}
fprintf(stdout,"File content: %s",fileContent); //Outputs "File content: (null)"
fclose(sharedFile);
}
}
Как ни странно, если я снова открою файл в родительском коде после разветвления, вывод будет правильным.
В чем может быть проблема?