我正在尝试打开一个文本文件,并同时从文件中读取一个子进程和父进程,然后输出它们的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;
}
答案 0 :(得分:0)
您可能有两个错误:
strtol()
而未检查是否有argv[1]
。你应该放一个警卫。您没有正确使用fgets()
。第一个参数必须是您自己分配的缓冲区,如:
char line[200];
char *cp = fgets(line, 150, fp);
之后cp
将为0(当fgets()
无法读取任何内容时)或者它将指向line
的第一个字符。
(最后,作为样式点,main()
应返回int
,而不是void
。某些现代编译器不接受您的代码。)