【发布时间】:2018-05-13 06:55:36
【问题描述】:
所以在学校我得到了这个练习,我需要编写一个程序来计算一个数字是否是质数。这个程序应该使用父子进程,并且应该使用strtoul将argv转换为unsigned long。
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
void checkprime(unsigned long num);
int main(int argc, char *argv, char *env)
{
strtoul(argv, NULL, 0);
pid_t pid = fork();
if(pid == 0)
{
unsigned long number;
printf("\nGive number to check: \n");
scanf("%lu",&number);
checkprime(number);
}
else if(pid < 0)
{
perror("Fork Failed!");
}
else
{
int status = -1, result;
waitpid(pid, &status, 0);
result = WEXITSTATUS(status);
if(result == 1)
{
printf("this is a prime number\n");
}
else if(status < 0)
{
perror("Something Failed");
}
else
{
printf("this is not a prime number\n");
}
}
return 0;
}
void checkprime(unsigned long num)
{
int i;
for(i = 2; i < num; i++)
{
if(num % i == 0)
{
exit(0);
}
}
exit(1);
}
所以当我尝试编译它时,它会说:第 13 行:不需要标识符。错误代码 1。
第 13 行的代码是:pid_t pid = fork();
现在我的问题是:为什么会出现这个错误?
已修复,感谢大家的帮助。我很感激。
【问题讨论】:
-
pid_t = pid = fork();的目的是什么?这根本不是有效的 C 语法。 -
更糟糕的是,您修复了您在此处显示的代码中的错误!您应该始终复制粘贴代码,这样就不会引入其他错误,或者像在这种情况下修复错误。现在这个问题是没有价值的,因为没有问题。
-
对不起,我的意思是:pid_t pid = fork();
-
查看man7.org/linux/man-pages/man3/strtol.3.html 并将您的调用移至局部变量声明下方的
strtol(...)。 -
另外,这也应该教你复制粘贴错误。完整、完整、未经修改的文本。
标签: c compilation fork pid