Linux上的pid_t,uid_t,gid_t的大小

Joe*_*haw 34 c linux 64-bit 32-bit sizeof

在Linux系统中(32位或64位),什么是大小pid_t,uid_tgid_t

Dav*_*ave 61

#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));
}
Run Code Online (Sandbox Code Playgroud)

编辑:每个受欢迎的请求(并且因为,实际上,99%的人来到这个问题将运行x86或x86_64)...

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

pid_t: 4
uid_t: 4
gid_t: 4
Run Code Online (Sandbox Code Playgroud)

  • 好吧,即使答案不是,代码也是可移植的.;-) (27认同)
  • 实际上,代码不可移植,因为格式说明符是`%d`但是`sizeof`返回`size_t`,它是无符号的,不一定是`int`的大小.正确的可移植格式说明符是`%zu`.我修好了. (12认同)
  • 据我所知,答案可以移植到所有Linux目标.他们都是4岁. (4认同)
  • 很高兴还包括至少一个示例架构的结果. (3认同)

Joe*_*haw 21

在intel架构上,大小定义/usr/include/bits/typesizes.h如下:

#define __UID_T_TYPE            __U32_TYPE
#define __GID_T_TYPE            __U32_TYPE
#define __PID_T_TYPE            __S32_TYPE
Run Code Online (Sandbox Code Playgroud)

换句话说,uid_tgid_t是无符号的32位整数,并且pid_t是带符号的32位整数.这适用于32位和64位.

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


Ste*_*son 13

标准定义pid_t为"有符号整数类型",uid_t并且gid_t仅仅定义为"整数类型"(因此可移植代码不应为它们采用任何特定类型).