fprintf возвращает ноль после fork () в c - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь открыть файл с помощью 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);
    }
}

Как ни странно, если я снова открою файл в родительском коде после разветвления, вывод будет правильным. В чем может быть проблема?

1 Ответ

0 голосов
/ 13 ноября 2018

fileContent не было выделено ни одного пробела.Возможно сделать это

char fileContent[101];

...

if (fscanf(sharedFile,"%100s",fileContent) != 1) // Prevent buffer overflows. Should return one when successful.
...