В системах Linux (или 32-или 64-разрядный), из чего размер pid_t
, uid_t
, и gid_t
?
#include <stdio.h>
#include <sys/types.h>
int main()
{
printf("pid_t: %zu\n", sizeof(pid_t));
printf("uid_t: %zu\n", sizeof(uid_t));
printf("gid_t: %zu\n", sizeof(gid_t));
}
РЕДАКТИРОВАТЬ: По популярному запросу (и потому, что реально 99% людей, которые задаются этим вопросом, будут использовать x86 или x86_64) ...
На Процессоры i686 и x86_64 (32- и 64-разрядные) под управлением Linux> = 3.0.0, ответ будет:
pid_t: 4
uid_t: 4
gid_t: 4
В архитектурах Intel размеры определены в /usr/include/bits/typesizes.h
:
#define __UID_T_TYPE __U32_TYPE
#define __GID_T_TYPE __U32_TYPE
#define __PID_T_TYPE __S32_TYPE
Другими словами, uid_t
и gid_t
- 32-разрядные целые числа без знака, а pid_t
- 32-разрядные целые числа со знаком. Это применимо как к 32-, так и к 64-битным.
Я не уверен, что они есть на других архитектурах, поскольку у меня их нет на данный момент, но окончательный способ - это скомпилировать программу, которая печатает вывод из sizeof (uid_t)
и т. д.
Стандарт определяет pid_t
как «целочисленный тип со знаком» и uid_t
и gid_t
просто как «целые типы» (поэтому переносимый код не должен принимать для них какой-либо конкретный тип).