获得声明错误

时间:2016-05-19 14:33:46

标签: c unix process operating-system

我正在尝试在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());

2 个答案:

答案 0 :(得分:0)

尝试使用

#include <unistd.h>
#include <sys/types.h>

这些是声明函数和必要类型的头文件。

答案 1 :(得分:0)

fork()getpid()的定义并不是因为您没有包含正确的头文件:

#include <unistd.h>
#include <sys/types.h>

要了解您必须包含哪些系统功能,您可以参考第2部分。例如:man 2 fork