En sistemas Linux (32 o 64 bits), ¿cuál es el tamaño de pid_t
, uid_t
y gid_t
?Tamaño de pid_t, uid_t, gid_t en Linux
Respuesta
#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: Por petición popular (y porque, siendo realistas, el 99% de las personas que vienen a esta pregunta se va a ejecutar x86 o x86_64) ...
en un i686 y x86_64 (así, 32- procesador de bit y 64 bits) que ejecuta Linux> = 3.0.0, la respuesta es:
pid_t: 4
uid_t: 4
gid_t: 4
En arquitecturas Intel, tamaños se definen en /usr/include/bits/typesizes.h
:
#define __UID_T_TYPE __U32_TYPE
#define __GID_T_TYPE __U32_TYPE
#define __PID_T_TYPE __S32_TYPE
En otras palabras, uid_t
y gid_t
son enteros sin signo de 32 bits y pid_t
es un entero de 32 bits con signo. Esto aplica tanto para 32 bits como para 64 bits.
no estoy seguro de lo que son en otras arquitecturas improvisada, ya que no tenían ninguna disponible en el momento, pero la forma definitiva es compilar un programa que imprime la salida de sizeof(uid_t)
, etc.
Los standard define pid_t
como un "tipo entero de" y uid_t
y gid_t
simplemente como "tipos de enteros" (lo que el código portátil no debe suponer ningún tipo particular para ellos).
¿Qué estándar? –
Mi página de manual para 'types.h', que dice ser POSIX, dice' uid_t' y 'gid_t' son tipos enteros (sin mención de firmado o sin firmar), y' pid_t' es un tipo de entero con signo. – ptomato
@Chris Me equivoqué con "pid_t", así que corrigí mi publicación. Sin embargo, el estándar no dice nada sobre la firma de "uid_t" o "gid_t". –
- 1. privilegios de root de forma permanente en Linux moderno
- 2. pid_t (y tipos similares): ¿por qué? ¿Por qué?
- 3. ¿Cómo puedo determinar el valor máximo de un pid_t?
- 4. tamaño del archivo de shell de linux
- 5. Aumente el tamaño de la pila en Linux con setrlimit
- 6. Detectar tamaño de bloque para cuota en Linux
- 7. Medir el tamaño de las bibliotecas en Linux
- 8. Cambiar el tamaño de una ventana a un tamaño establecido en Linux
- 9. ¿Cómo crear un archivo con un tamaño dado en Linux?
- 10. ¿Cómo obtener el tamaño de archivo en el disco en Linux?
- 11. Especificación UDP recibir tamaño del búfer en tiempo de ejecución en Linux
- 12. ¿Hay un límite de tamaño de pila de un proceso en Linux
- 13. ¿Cómo crear un archivo de tamaño de más de 2 GB en Linux/Unix?
- 14. Conozca el tamaño de aceptar la cola de conexiones pendientes en GNU/Linux
- 15. ¿Cómo encontrar el tamaño de la memoria virtual y el tamaño de la memoria caché de un sistema Linux?
- 16. ¿Es posible cambiar el tamaño de una tubería con nombre en Linux?
- 17. ¿Hay un límite de tamaño para el módulo kernel en Linux?
- 18. programación en tiempo real en Linux
- 19. ¿Cuál es el tamaño máximo del mensaje del datagrama AF_UNIX que se puede enviar en Linux?
- 20. Cómo determinar el tamaño del búfer para vswprintf en Linux gcc
- 21. Cómo obtener el tamaño de página del kernel de Linux programáticamente
- 22. ¿Por qué es el tamaño de página de Linux (x86) 4 KB, cómo se calcula eso?
- 23. Linux PDF/Optimización de Postscript
- 24. C y prácticas/ejemplos modernos en Linux
- 25. Cómo obtener información de hardware en Linux usando C++
- 26. ¿Qué es vulnerable acerca de este código C?
- 27. Manejo de excepciones en linux
- 28. Proceso de fondo en Linux
- 29. de Objective-C en Linux
- 30. Registro de daemon en Linux
Bueno, el código es portable incluso si las respuestas no lo son. ;-) –
Las respuestas son portátiles para todos los objetivos de Linux, hasta donde yo sé. Son todos 4. –
En realidad, el código no era portátil, porque el especificador de formato era '% d' pero' sizeof' devuelve 'size_t', que no está firmado y no tiene necesariamente el tamaño de un' int'. El especificador de formato portátil correcto es '% zu'. Lo he arreglado –