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

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

34
задан Joe Shaw 17 December 2009 в 16:18
поделиться

3 ответа

#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
61
ответ дан 27 November 2019 в 16:12
поделиться

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

21
ответ дан 27 November 2019 в 16:12
поделиться

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

13
ответ дан 27 November 2019 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: