我正在尝试在C ++中运行以下代码。我得到了一些我似乎无法弄清楚的声明错误。错误块在代码下面给出。
我正在尝试编写一个程序,使用fork()系统调用来计算子进程中给定数字的阶乘。输入整数将通过命令行给出。对于前者如果给出6,则输出将为720.由于父和子拥有自己的数据副本,因此孩子必须输出阶乘。在退出程序之前,父必须调用wait()调用以等待子进程完成。
#include<stdio.h>
#include<sys/wait.h>
#include<stdlib.h>
int main( ){
int num;
int fact=1;
int pid, k=1;
int status;
printf("Enter a number....nn");
scanf("%d",&num);
printf("n");
pid = fork();
if (pid == -1){
printf("Error Occured in Forking a Process..n");
exit(0);
}
//child process
if (pid==0){
printf("nnChild PID is %ldnn", (long) getpid());
int i=0;
if(num==0||num==1){
fact=1;
exit(fact);
}
else{
for(i=1;i<=num;i++){
fact = fact * i;
//printf("fact= %d",fact);
}
printf("n Child Execution Completed...n");
exit(fact);
}
}
else{
wait(&k);
printf(" K= %d",k);
int f=WEXITSTATUS(k);
printf("nNow in parentnn");
printf("nn Factorial of %d is %d ",num,f);
}
}
我遇到了这些错误,虽然在代码中声明了fork:
main.cpp:13:13:错误:此范围内未声明'fork'
pid = fork();
main.cpp:20:48:错误:'getpid'未在此范围内声明printf(“nnChild PID is%ldnn”,(long)getpid());
答案 0 :(得分:0)
尝试使用
#include <unistd.h>
#include <sys/types.h>
这些是声明函数和必要类型的头文件。
答案 1 :(得分:0)
fork()
和getpid()
的定义并不是因为您没有包含正确的头文件:
#include <unistd.h>
#include <sys/types.h>
要了解您必须包含哪些系统功能,您可以参考第2部分。例如:man 2 fork