C 在尝试打开具有子进程和父进程的文件时,是否一直出现seg错误?
我试图打开一个文本文件,让子进程和父进程从文件中一次读取一行,然后输出它们的PID,后跟读取的行。除了无论我看起来做什么,我总是遇到seg故障,甚至无法找到我的问题所在C 在尝试打开具有子进程和父进程的文件时,是否一直出现seg错误?,c,fork,fopen,fgets,pid,C,Fork,Fopen,Fgets,Pid,我试图打开一个文本文件,让子进程和父进程从文件中一次读取一行,然后输出它们的PID,后跟读取的行。除了无论我看起来做什么,我总是遇到seg故障,甚至无法找到我的问题所在 int main(int argc, char *argv[]){ if(!argv[1]){ return 1; } int var1 = strtol(argv[1], NULL, 10); FILE *fp; fp = fopen("prog2Bout
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;
}
intmain(intargc,char*argv[]){
如果(!argv[1]){
返回1;
}
int var1=strtol(argv[1],NULL,10);
文件*fp;
fp=fopen(“prog2Boutput.txt”,“r”);
如果(fp==NULL){
fprintf(stderr,“无法在.list中打开输入文件!\n”);
出口(1);
}
int childP=fork();
如果(childP您可能有两个错误:
您使用的是strtol()
,没有检查是否存在argv[1]
。您应该安装一个防护装置
您没有正确使用fgets()
。第一个参数必须是您自己分配的缓冲区,如:
char line[200];
char *cp = fgets(line, 150, fp);
之后,cp
将为0(当fgets()
无法读取任何内容时),或者它将指向行的第一个字符
(最后,作为风格点,main()
应该返回int
,而不是void
。一些现代编译器不会接受您的代码。)您认为调用fgets
时,line
指向什么?