gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:05:44 25 4
gpt4 key购买 nike

我正在尝试打开一个文本文件,让子进程和父进程一次从文件中读取一行,并输出其 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] 。你应该派一个 guard 。
  2. 您没有使用fgets()正确。第一个参数必须是您自己分配的缓冲区,如下所示:

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

之后cp要么是 0(当 fgets() 无法读取任何内容时),要么指向 line 的第一个字符.

(最后,作为风格点, main() 应该返回 int ,而不是 void 。一些现代编译器不会接受您的代码。)

关于c - 尝试使用子进程和父进程打开文件时不断出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com