尝试使用子进程和父进程打开文件时不断出现段错误?
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;
}
您可能有两个错误:
- 您在使用
strtol()
时没有检查是否存在 argv[1]
。你应该派个守卫。
您没有正确使用 fgets()
。第一个参数必须是您自己分配的缓冲区,如:
char line[200];
char *cp = fgets(line, 150, fp);
在那之后 cp
将是 0(当 fgets()
无法读取任何内容时)或者它将指向 line
.
的第一个字符
(最后,就风格而言,main()
应该 return 和 int
,而不是 void
。一些现代编译器不会接受您的代码。)
我正在尝试打开一个文本文件,让子进程和父进程一次从文件中读取一行,然后输出它们的 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;
}
您可能有两个错误:
- 您在使用
strtol()
时没有检查是否存在argv[1]
。你应该派个守卫。 您没有正确使用
fgets()
。第一个参数必须是您自己分配的缓冲区,如:char line[200]; char *cp = fgets(line, 150, fp);
在那之后 cp
将是 0(当 fgets()
无法读取任何内容时)或者它将指向 line
.
(最后,就风格而言,main()
应该 return 和 int
,而不是 void
。一些现代编译器不会接受您的代码。)