Размер pid_t, uid_t, gid_t в Linux - PullRequest
       31

Размер pid_t, uid_t, gid_t в Linux

34 голосов
/ 17 декабря 2009

В системах Linux (32- или 64-разрядных), каков размер pid_t, uid_t и gid_t?

Ответы [ 3 ]

58 голосов
/ 17 декабря 2009
#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
22 голосов
/ 17 декабря 2009

В архитектурах 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) и т. Д.

13 голосов
/ 19 декабря 2009

Стандарт определяет pid_t как "целочисленный тип со знаком", а uid_t и gid_t просто как "целочисленные типы" (поэтому переносимый код не должен принимать для них какой-либо конкретный тип) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...