c99 - ошибка: неизвестное имя типа 'pid_t'

Я использую Linux (3.13.0-24-generiC# 46-Ubuntu) и написал простую программу на C pid,

При компиляции у меня возникли некоторые проблемы:

  • gcc pid_test.c, это отлично.
  • gcc -std=c99 pid_test.c или же gcc -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;
}

Я сделал поиск с Google; у людей, похоже, есть похожая проблема в Windows, но я использую Linux. Есть ли c99 или же c11 Удалить pid_t или перейти на другой заголовок? Или же…

2 ответа

Решение

Следующее работает для меня

// 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;
}

Я нашел это здесь

В более старых стандартах Posix, pid_t был определен только в <sys/types.h>, но с Posix.1-2001 (выпуск 7) он также находится в <unistd.h>, Однако для того, чтобы получить определения в Posix.1-2001, вы должны определить соответствующий макрос тестирования функций, прежде чем включать любой стандартный заголовочный файл.

Таким образом, любая из следующих двух последовательностей будет работать:

// 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>
Другие вопросы по тегам