【问题标题】:Getting declaration errors获取声明错误
【发布时间】:2016-09-16 12:34:07
【问题描述】:

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

【问题讨论】:

  • 为什么这被标记为 C++ ?对我来说它看起来像普通的 C 代码?

标签: c unix process operating-system


【解决方案1】:

fork()getpid() 的定义未知,因为您没有包含正确的头文件:

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

要了解这些系统功能必须包含的内容,可以参考手册第 2 节。例如:man 2 fork

【讨论】:

    【解决方案2】:

    尝试使用

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 2019-02-10
      • 2013-06-15
      • 2014-12-26
      • 1970-01-01
      相关资源
      最近更新 更多