我知道标准没有说明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不变.
那么,uid_t在GNU库中签名还是未签名?
我如何能提供-1,如果uid_t和gid_t是无符号(-1将被转换为0xFFFFFFFF)?
uid_t(在一些 typedefs/defines 之后)被定义为__U32_TYPEwhich 被定义为unsigned int(在我的 Gentoo Linux 系统上)。
然而,仅仅因为-1具有特殊含义并不意味着 UID 仅限于适合有符号int. 它仅意味着最高值(即(unsigned int)-1)不是有效的 UID。尽管setreuid它(signed int)ruid接受.-1uid_t