Auf Linux-Systemen (entweder 32- oder 64-Bit), wie groß ist die Größe von pid_t
, uid_t
und gid_t
?Größe von pid_t, uid_t, gid_t unter Linux
Antwort
#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: Per vielfachen Wunsch (und weil, realistisch gesehen, 99% der Menschen auf diese Frage kommen werden x86 oder x86_64 zu laufen) ...
auf einem i686 und x86_64 (so, 32- Bit und 64-Bit) Prozessor mit Linux> = 3.0.0, lautet die Antwort:
pid_t: 4
uid_t: 4
gid_t: 4
auf Intel-Architekturen sind Größen in /usr/include/bits/typesizes.h
definiert:
#define __UID_T_TYPE __U32_TYPE
#define __GID_T_TYPE __U32_TYPE
#define __PID_T_TYPE __S32_TYPE
, uid_t
und gid_t
sind unsigned 32-Bit-Integer und pid_t
ist eine ganze Zahl 32-Bit unterzeichnet. Dies gilt sowohl für 32- als auch für 64-Bit-Bits.
Ich bin nicht sicher, was sie auf andere Architekturen offhand sind, wie ich habe keine zur Zeit zur Verfügung, aber die endgültige Art und Weise ist es, ein Programm zu kompilieren, die die Ausgabe von sizeof(uid_t)
druckt usw.
Die standardpid_t
definiert als „vorzeichenbehaftete Ganzzahl-Typ“ und uid_t
und gid_t
lediglich als „Integer-Typen“ (so sollte portablen Code keinen bestimmten Typ für sie übernehmen).
Welcher Standard? –
Meine Manpage für 'types.h', die behauptet, POSIX zu sein, sagt' uid_t' und 'gid_t' sind Integer-Typen (keine Erwähnung von signed oder unsigned) und' pid_t' ist ein vorzeichenbehafteter Integer-Typ. – ptomato
@Chris Ich habe mich wegen "pid_t" geirrt, also habe ich meinen Beitrag korrigiert. Der Standard sagt jedoch nichts über die Signiertheit von "uid_t" oder "gid_t" aus. –
Nun, der Code ist tragbar, auch wenn die Antworten nicht sind. ;-) –
Die Antworten sind soweit ich weiß auf alle Linux-Targets übertragbar. Sie sind alle 4. –
Eigentlich war der Code nicht portierbar, weil der Formatbezeichner '% d' war, aber' sizeof' gibt ein 'size_t' zurück, das unsigned ist und nicht unbedingt die Größe eines' int'. Der korrekte portable Formatbezeichner ist '% zu'. Ich habe es repariert. –