尝试使用子进程和父进程打开文件时不断出现段错误?

Keep getting a seg fault when trying to open files with child and parent processes?

我正在尝试打开一个文本文件,让子进程和父进程一次从文件中读取一行,然后输出它们的 PID,然后是读取的行。除了无论我似乎在做什么,我都会不断遇到段错误,甚至无法找到我的问题所在。

int main(int argc, char *argv[]){

    if(!argv[1]){
             return 1;
    }

    int var1 = strtol(argv[1], NULL, 10);

    FILE *fp;
    fp = fopen("prog2Boutput.txt", "r");

    if (fp == NULL) {
            fprintf(stderr, "Can't open input file in.list!\n");
            exit(1);
    }

    int childP = fork();

    if(childP<0){
            fprintf(stderr, "fork failed\n");
            exit(1);
    }
    else if(childP==0){
            char* line = fgets(line,150, fp);
            printf("child: (pid:%d) (line:%s)\n", (int)getpid(), line);
    }
    else{
            char* line = fgets(line,150,fp);
            printf("parent: (pid:%d) (line:%s)\n", (int)getpid(), line);
    }

    fclose(fp);
    return 0;
}

您可能有两个错误:

  1. 您在使用 strtol() 时没有检查是否存在 argv[1]。你应该派个守卫。
  2. 您没有正确使用 fgets()。第一个参数必须是您自己分配的缓冲区,如:

    char line[200];
    char *cp = fgets(line, 150, fp);
    

在那之后 cp 将是 0(当 fgets() 无法读取任何内容时)或者它将指向 line.

的第一个字符

(最后,就风格而言,main() 应该 return 和 int,而不是 void。一些现代编译器不会接受您的代码。)