c99 - 错误:未知类型名称'pid_t'

时间:2015-08-29 02:56:39

标签: c c99 pid c11

我正在使用Linux( 3.13.0-24-generic#46-Ubuntu ),并写了一个简单的C程序 关于pid

编译时,我遇到了一些问题:

  • gcc pid_test.c,这很好。
  • gcc -std=c99 pid_test.cgcc -std=c11 pid_test.c,提供错误:
  

错误:未知类型名称'pid_t'

pid_test.c:

// getpid() & getppid() test
#include <stdio.h>
#include <unistd.h>

int pid_test() {
    pid_t pid, ppid;
    pid = getpid();
    ppid = getppid();
    printf("pid: %d, ppid: %d\n", pid, ppid);
    return 0;
}

int main(int argc, void *argv[]) {
    pid_test();
    return 0;
}

我确实在谷歌搜索过;人们似乎在Windows上有类似的问题,但我使用的是Linux。 c99c11会移除pid_t还是转移到其他标题?还是......

2 个答案:

答案 0 :(得分:5)

以下为我工作

// getpid() & getppid() test
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>    //NOTE: Added
int pid_test() {
    pid_t pid, ppid;
    pid = getpid();
    ppid = getppid();
    printf("pid: %d, ppid: %d\n", pid, ppid);
    return 0;
}

int main(int argc, void *argv[]) {
    pid_test();
    return 0;
}

我发现它here

答案 1 :(得分:4)

在较旧的Posix标准中,pid_t仅在<sys/types.h>中定义,但自Posix.1-2001(第7期)起,它也在<unistd.h>中。但是,为了在Posix.1-2001中获取定义,您必须在包含任何标准头文件之前定义适当的feature test macro

因此,以下两个序列中的任何一个都可以工作:

// You could use an earlier version number here;
// 700 corresponds to Posix 2008 with XSI extensions
#define _XOPEN_SOURCE 700
#include <unistd.h>

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