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>