Sur les systèmes Linux (32 ou 64 bits), quelle est la taille de pid_t
, uid_t
et ?Taille de pid_t, uid_t, gid_t sous Linux
Répondre
#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 gens qui viennent à cette question vont être en cours d'exécution x86 ou x86_64) ...
Sur un i686 et x86_64 (donc, 32- processeur bit et 64 bits) sous Linux> = 3.0.0, la réponse est:
pid_t: 4
uid_t: 4
gid_t: 4
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
ne sont pas signés entiers 32 bits et pid_t
est un entier signé 32 bits. Ceci s'applique à la fois aux 32 et 64 bits.
Je ne sais pas ce qu'ils sont sur d'autres architectures que je ne désinvolture ai pas disponible pour le moment, mais la façon définitive est de compiler un programme qui imprime la sortie de sizeof(uid_t)
, etc.
Les standard définit pid_t
comme un « type entier signé » et uid_t
et gid_t
simplement comme « types entiers » (donc du code portable ne doit pas supposer un type particulier pour eux).
Quelle norme? –
Ma page de manuel pour 'types.h', qui prétend être POSIX, dit' uid_t' et 'gid_t' sont des types entiers (aucune mention de signed ou unsigned), et' pid_t' est un type entier signé. – ptomato
@Chris J'avais tort à propos de "pid_t", alors j'ai corrigé mon message. La norme ne dit rien sur la signature de "uid_t" ou "gid_t", cependant. –
Eh bien, le code est portable même si les réponses ne le sont pas. ;-) –
Les réponses sont portables à toutes les cibles Linux autant que je sache. Ils sont tous 4. –
En fait, le code n'était pas portable, parce que le spécificateur de format était '% d' mais' sizeof' renvoie un 'size_t', qui est non signé et pas nécessairement la taille d'un' int'. Le spécificateur de format portable correct est '% zu'. Je l'ai réparé. –