Rozmiar pid t, uid t, gid T w Linuksie

W systemach Linux (32 - lub 64-bitowych), jaki jest rozmiar pid_t, uid_t, i gid_t?

Author: Joe Shaw, 2009-12-17

3 answers

#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));
}

EDIT: na popularne żądanie (a ponieważ, realistycznie, 99% osób przychodzących na to pytanie będzie działać x86 lub x86_64)...

Na procesorze i686 i x86_64 (czyli 32-bitowym i 64-bitowym) z systemem Linux > = 3.0.0, odpowiedź brzmi:

pid_t: 4
uid_t: 4
gid_t: 4
 53
Author: Dave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-04 14:33:49

Na architekturach Intela, rozmiary są zdefiniowane w /usr/include/bits/typesizes.h:

#define __UID_T_TYPE            __U32_TYPE
#define __GID_T_TYPE            __U32_TYPE
#define __PID_T_TYPE            __S32_TYPE

Innymi słowy, uid_t i gid_t są niepodpisanymi 32-bitowymi liczbami całkowitymi, a pid_t jest podpisaną 32-bitową liczbą całkowitą. Dotyczy to zarówno 32-jak i 64-bitów.

Nie jestem pewien, jakie są na innych architekturach, ponieważ nie mam żadnych dostępnych w tej chwili, ale ostatecznym sposobem jest skompilowanie programu, który wyświetla wyjście sizeof(uid_t), itp.

 18
Author: Joe Shaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-17 16:50:38

Standard definiuje {[0] } jako" signed integer type", a uid_t i gid_t jedynie jako "integer types" (więc przenośny Kod nie powinien zakładać dla nich żadnego konkretnego typu).

 12
Author: Steve Emmerson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-09 21:41:37