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. –
- 1. Augmenter la taille de la pile sous Linux avec setrlimit
- 2. Taille du tas de démarrage par défaut sous Linux?
- 3. Comment trouver la taille du secteur disquette \ CD sous Linux?
- 4. Taille de fichier shell Linux
- 5. Développement sous GUI sous Linux
- 6. Demande de taille de terminal [C - Linux]
- 7. Implémentation de pthread_create sous Linux
- 8. Agrégation de ports sous Linux
- 9. Programmes de benchmarking sous Linux
- 10. Gravure de DVD sous Linux
- 11. Identification de hauteur sous Linux
- 12. Echange sous Linux
- 13. Cookies Firefox sous Linux
- 14. gérer SIGSEGV sous Linux?
- 15. Sémaphore compté sous Linux?
- 16. ASP.Net sous Linux
- 17. Enregistrement sous Linux
- 18. Assemblage sous Linux
- 19. _splitpath sous Linux
- 20. Programmation Flash sous Linux
- 21. Capicom Decryption sous Linux
- 22. Développement Bada sous Linux
- 23. Localisation d'application sous Linux
- 24. Spécifier UDP recevoir la taille de la mémoire tampon lors de l'exécution sous Linux
- 25. Détection de la taille de bloc pour le quota sous Linux
- 26. C++ flash sous linux
- 27. Multitouch sous Linux
- 28. ASP.NET sous Linux!
- 29. GetTcpTable équivalent sous Linux
- 30. Symfony sfPHPExcelPlugin sous Linux
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é. –