uid_t类型是签名还是未签名?

use*_*763 11 c uid

我知道标准没有说明uid_t或是的签名gid_t.

不一致性:

页面http://www.gnu.org/software/libc/manual/html_node/Reading-Persona.html说:

在GNU C库中,这是unsigned int的别名.

但是man setreuid说:

为实际或有效用户ID 提供值-1会强制系统保持该ID不变.

问题:

  1. 那么,uid_t在GNU库中签名还是未签名?

  2. 我如何能提供-1,如果uid_tgid_t是无符号(-1将被转换为0xFFFFFFFF)?

Jon*_*ler 9

POSIX明确表示这pid_t是一个用于表示进程和进程组ID的有符号整数类型.

它表示这ino_t是一个用于文件序列号的无符号整数类型.

对于两者uid_tgid_t,它表示类型是用于用户ID和组IDS的整数类型(不提及有符号或无符号).

因此,该标准清楚地表明,取决于平台uid_t,gid_t可以签名或不签名的类型.假设出现这种不确定性是非常合理的,因为实际实现使用了有符号和无符号类型,并且标准的设计不会使现有实现无效.


Thi*_*ter 4

uid_t(在一些 typedefs/defines 之后)被定义为__U32_TYPEwhich 被定义为unsigned int(在我的 Gentoo Linux 系统上)。

然而,仅仅因为-1具有特殊含义并不意味着 UID 仅限于适合有符号int. 它仅意味着最高值(即(unsigned int)-1)不是有效的 UID。尽管setreuid(signed int)ruid接受.-1uid_t

  • 但他可能位于不同的系统上,并且具有不同的类型定义和定义。另外,我懒得去找我的是什么:P (2认同)