Linux 上 pid_t、uid_t、gid_t 的大小
Posted
技术标签:
【中文标题】Linux 上 pid_t、uid_t、gid_t 的大小【英文标题】:Size of pid_t, uid_t, gid_t on Linux 【发布时间】:2010-12-27 17:21:29 【问题描述】:在 Linux 系统(32 位或 64 位)上,pid_t
、uid_t
和 gid_t
的大小是多少?
【问题讨论】:
【参考方案1】:在英特尔架构上,大小在/usr/include/bits/typesizes.h
中定义:
#define __UID_T_TYPE __U32_TYPE
#define __GID_T_TYPE __U32_TYPE
#define __PID_T_TYPE __S32_TYPE
换句话说,uid_t
和 gid_t
是无符号 32 位整数,pid_t
是有符号 32 位整数。这适用于 32 位和 64 位。
我不确定它们在其他架构上是什么,因为我目前没有可用的,但最终的方法是编译一个程序,打印sizeof(uid_t)
等的输出。
【讨论】:
【参考方案2】:#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
【讨论】:
据我所知,答案可移植到所有 Linux 目标。他们都是 4 岁。 实际上,代码是不可移植的,因为格式说明符是%d
,但sizeof
返回一个size_t
,它是无符号的,不一定是int
的大小。正确的可移植格式说明符是%zu
。我已经修好了。
最好也包含至少一个示例架构的结果。
4 是否意味着 4 个字节?【参考方案3】:
standard 将pid_t
定义为“有符号整数类型”,而将uid_t
和gid_t
定义为“整数类型”(因此可移植代码不应为它们假定任何特定类型)。
【讨论】:
我的types.h
的手册页声称是 POSIX,说 uid_t
和 gid_t
是整数类型(没有提到有符号或无符号),pid_t
是有符号整数类型.
@Chris 我对“pid_t”有误,所以我更正了我的帖子。但是,该标准没有说明“uid_t”或“gid_t”的签名。
请注意,该标准还提供了id_t
类型,“可用于包含至少一个pid_t
、uid_t
或gid_t
”。
pid_t 数据类型是有符号整数类型,能够表示进程 ID。在 GNU C 库中,这是一个 int。 (gnu.org/software/libc/manual/html_node/…)以上是关于Linux 上 pid_t、uid_t、gid_t 的大小的主要内容,如果未能解决你的问题,请参考以下文章
关于pid_t和fork()的理解,linux tomcat mysql php安装