Größe von pid_t, uid_t, gid_t unter Linux

Lesezeit: 2 Minuten

Benutzeravatar von Joe Shaw
Joe Shaw

Was ist auf Linux-Systemen (entweder 32- oder 64-Bit) die Größe von pid_t, uid_tund gid_t?

Daves Benutzeravatar
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 aber sizeof gibt a zurück size_tdas unsigniert ist und nicht unbedingt die Größe eines hat int. 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

Benutzeravatar von Joe Shaw
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.

Benutzeravatar von Steve Emmerson
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.hdie behauptet, POSIX zu sein, sagt uid_t und gid_t sind Integer-Typen (keine Erwähnung von signiert oder unsigned) und pid_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 enthalten pid_t, uid_toder gid_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

1401400cookie-checkGröße von pid_t, uid_t, gid_t unter Linux

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy