1. ホーム
  2. c

[解決済み] uid_t 型は符号付きか符号なしか?

2022-02-19 11:02:24

質問内容

の符号化については、規格では何も書かれていないことは知っています。 uid_t または gid_t .

矛盾している。

ページ http://www.gnu.org/software/libc/manual/html_node/Reading-Persona.html は言う。

GNU C ライブラリでは、これは 符号なしint .

しかし man setreuid は言う。

の値を供給する。 -1 を指定すると、そのIDは変更されないようになります。

質問

  1. ということは uid_t はGNUライブラリでは符号付きか符号なしですか?

  2. どのようにすれば -1 もし uid_tgid_t は符号なし( -1 は、次のように変換されます。 0xFFFFFFFF )?

解決方法は?

uid_t は、(いくつかの型付け/定義の後に)次のように定義されます。 __U32_TYPE と定義されています。 unsigned int (私のGentoo Linuxシステムでの話です)。

しかし、ただ -1 が特別な意味を持っているからと言って、UIDが符号化された int . ただ、最も高い値(すなわち (unsigned int)-1 ) は有効なUIDではありません。のコードは setreuid は、おそらくそのキャストの逆形式を使用しています ( (signed int)ruid ) と比較するために -1 を受け取りますが、きれいに uid_t .