Su sistemi Linux (a 32 o 64 bit), qual è la dimensione di pid_t
, uid_t
e gid_t
?Dimensioni di pid_t, uid_t, gid_t su Linux
risposta
#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 grande richiesta (e perché, realisticamente, il 99% delle persone che vengono a questa domanda stanno per essere in esecuzione x86 o x86_64) ...
su un i686 e x86_64 (così, 32- bit e 64 bit) con processore Linux> = 3.0.0, la risposta è:
pid_t: 4
uid_t: 4
gid_t: 4
In architetture Intel, le dimensioni sono definite /usr/include/bits/typesizes.h
:
#define __UID_T_TYPE __U32_TYPE
#define __GID_T_TYPE __U32_TYPE
#define __PID_T_TYPE __S32_TYPE
In altre parole, uid_t
e gid_t
sono senza segno interi a 32 bit e pid_t
è un intero a 32 bit con segno. Questo vale sia per i 32 che per i 64 bit.
io non sono sicuro di quello che sono in altre architetture due piedi come io non ho alcun disponibile al momento, ma il modo definitivo di compilare un programma che stampa l'uscita di sizeof(uid_t)
, ecc
I standard definisce pid_t
come "tipo intero" e uid_t
e gid_t
semplicemente come "tipi interi" (così codice portabile non dovrebbe assumere qualsiasi tipo particolare di loro).
Quale standard? –
La mia manpage per 'types.h', che afferma di essere POSIX, dice' uid_t' e 'gid_t' sono tipi interi (nessuna menzione di firmati o non firmati), e' pid_t' è un tipo di intero con segno. – ptomato
@Chris Ho sbagliato su "pid_t", quindi ho corretto il mio post. Lo standard non dice nulla sulla firma di "uid_t" o "gid_t", comunque. –
Bene, il codice è portatile anche se le risposte non lo sono. ;-) –
Le risposte sono portatili per tutti gli obiettivi Linux, per quanto ne so. Sono tutti 4. –
In realtà, il codice non era portatile, perché lo specificatore di formato era '% d', ma' sizeof' restituisce un 'size_t', che è senza segno e non necessariamente la dimensione di un' int'. Lo specificatore di formato portatile corretto è '% zu'. L'ho risolto –