41

在 Linux 系统(32 位或 64 位)上pid_tuid_t、 和的大小是gid_t多少?

4

3 回答 3

68
#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));
}

编辑:根据流行的要求(实际上,99% 的人来回答这个问题将运行 x86 或 x86_64)......

在运行 Linux >= 3.0.0 的 i686 和 x86_64(即 32 位和 64 位)处理器上,答案是:

pid_t: 4
uid_t: 4
gid_t: 4
于 2009-12-17T16:21:04.017 回答
23

在英特尔架构上,大小定义在/usr/include/bits/typesizes.h

#define __UID_T_TYPE            __U32_TYPE
#define __GID_T_TYPE            __U32_TYPE
#define __PID_T_TYPE            __S32_TYPE

换句话说,uid_tandgid_t是无符号的 32 位整数,并且pid_t是有符号的 32 位整数。这适用于 32 位和 64 位。

我不确定它们在其他架构上是什么,因为我目前没有任何可用的,但最终的方法是编译一个打印输出sizeof(uid_t)等的程序。

于 2009-12-17T16:02:44.897 回答
15

标准定义pid_t为“有符号整数类型”uid_t并且gid_t仅定义为“整数类型”(因此可移植代码不应为它们假定任何特定类型)。

于 2009-12-19T03:15:31.803 回答