Was ist auf Linux-Systemen (entweder 32- oder 64-Bit) die Größe von pid_t
, uid_t
und gid_t
?
Größe von pid_t, uid_t, gid_t unter Linux
Joe Shaw
David
#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));
}
BEARBEITEN: Auf vielfachen Wunsch (und weil realistischerweise 99 % der Leute, die zu dieser Frage kommen, x86 oder x86_64 ausführen werden) …
Auf einem i686- und x86_64-Prozessor (also 32-Bit- und 64-Bit-Prozessor) mit Linux >= 3.0.0 lautet die Antwort:
pid_t: 4
uid_t: 4
gid_t: 4
-
Die Antworten sind meines Wissens auf alle Linux-Ziele portierbar. Sie sind alle 4.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
5. Juli 2011 um 0:16 Uhr
-
Eigentlich war der Code nicht portierbar, weil der Formatbezeichner es war
%d
abersizeof
gibt a zurücksize_t
das unsigniert ist und nicht unbedingt die Größe eines hatint
. Der korrekte Bezeichner für tragbare Formate ist%zu
. Ich habe es repariert.– Mayoff ausrauben
3. April 2014 um 21:58 Uhr
-
Es wäre schön, auch die Ergebnisse für mindestens eine Beispielarchitektur einzubeziehen.
– Pavel Simerda
4. Januar 2015 um 20:28 Uhr
-
Bedeutet 4 4 Byte?
– Zappen
31. August 2019 um 18:06 Uhr
Joe Shaw
Auf Intel-Architekturen sind Größen in definiert /usr/include/bits/typesizes.h
:
#define __UID_T_TYPE __U32_TYPE
#define __GID_T_TYPE __U32_TYPE
#define __PID_T_TYPE __S32_TYPE
Mit anderen Worten, uid_t
und gid_t
sind vorzeichenlose 32-Bit-Ganzzahlen und pid_t
ist eine vorzeichenbehaftete 32-Bit-Ganzzahl. Dies gilt sowohl für 32- als auch für 64-Bit.
Ich bin mir nicht sicher, was sie auf anderen Architekturen sind, da ich im Moment keine zur Verfügung habe, aber der endgültige Weg besteht darin, ein Programm zu kompilieren, das die Ausgabe von druckt sizeof(uid_t)
etc.
Steve Emmerson
Das Standard definiert pid_t
als “signed integer type” und uid_t
und gid_t
lediglich als “ganzzahlige Typen” (daher sollte portabler Code keinen bestimmten Typ für sie annehmen).
-
Meine Manpage für
types.h
die behauptet, POSIX zu sein, sagtuid_t
undgid_t
sind Integer-Typen (keine Erwähnung von signiert oder unsigned) undpid_t
ist ein vorzeichenbehafteter ganzzahliger Typ.– Tomaten
9. Oktober 2013 um 17:40 Uhr
-
@Chris Ich habe mich bei “pid_t” geirrt, also habe ich mein Posting korrigiert. Der Standard sagt jedoch nichts über die Signiertheit von “uid_t” oder “gid_t” aus.
– Steve Emmerson
9. Oktober 2013 um 21:41 Uhr
-
Beachten Sie, dass der Standard auch die
id_t
Typ, der „verwendet werden kann, um mindestens a zu enthaltenpid_t
,uid_t
odergid_t
“.– Mayoff ausrauben
3. April 2014 um 22:00 Uhr
-
Der Datentyp pid_t ist ein vorzeichenbehafteter ganzzahliger Typ, der eine Prozess-ID darstellen kann. In der GNU-C-Bibliothek ist dies ein int. (gnu.org/software/libc/manual/html_node/…)
– debuggen
30. Mai 2018 um 10:22 Uhr