fprintf在c中的fork()之后返回null

时间:2018-11-13 16:21:23

标签: c file process fork

我正在尝试使用fopen打开文件,派生当前进程并使子进程在文件上写一些东西;当子进程退出时,父进程应该读取文件的内容,但即使文件已正确写入,它也会读取“ null”。没有错误报告。 这是我的代码:

#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);
    }
}

奇怪的是,如果我在fork之后再次打开父代码中的文件,则输出正确。 可能是什么问题?

1 个答案:

答案 0 :(得分:3)

fileContent尚未分配任何空间。也许这样做

char fileContent[101];

...

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