web-dev-qa-db-fra.com

Taille de pid_t, uid_t, gid_t sous Linux

Sur les systèmes Linux (32 ou 64 bits), quelle est la taille de pid_t, uid_t, et gid_t?

34
Joe Shaw
#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: Par demande populaire (et parce que, de façon réaliste, 99% des personnes qui viendront à cette question utiliseront x86 ou x86_64) ...

Sur un processeur i686 et x86_64 (donc, 32 bits et 64 bits) exécutant Linux> = 3.0.0, la réponse est:

pid_t: 4
uid_t: 4
gid_t: 4
60
Dave

Sur les architectures Intel, les tailles sont définies dans /usr/include/bits/typesizes.h:

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

En d'autres termes, uid_t Et gid_t Sont des entiers 32 bits non signés et pid_t Est un entier 32 bits signé. Cela vaut pour les 32 et 64 bits.

Je ne sais pas trop ce qu'elles sont sur d'autres architectures car je n'en ai pas pour le moment, mais le moyen définitif est de compiler un programme qui imprime la sortie de sizeof(uid_t), etc.

22
Joe Shaw

standard définit pid_t comme "type entier signé" et uid_t et gid_t simplement en tant que "types entiers" (donc le code portable ne devrait pas supposer de type particulier pour eux).

13
Steve Emmerson