i_mode 属性

inode 構造体の i_mode 属性。

	umode_t			i_mode;

umode_t は i386 だと以下な定義。

typedef unsigned short umode_t;

short int は i386 だと 16bit?

(gdb) p sizeof(short)
$1 = 2
(gdb)

ええと、i_mode を切り分けるナニは include/linux/stat.h にて定義されている。例えば S_IFMT マクロだと以下。

#define S_IFMT  00170000

これは bit で表現すると以下?

1111000000000000

16bit ですな。これでファイルの属性を定義している模様。ケツの 9bits はファイルの権限な属性でその前の 3bits が setuid だの setgid だの stickyBit だの。で、上記の先頭 4bits がファイルの種別な模様。これは find の -type なオプションで指定可能なものと合致。
文字化けするので man find のソレの引用は略。

path_lookup() 手続きに渡す flags な引数

3rd Edition の 12.5 にて解説あり。ソースを確認したらマクロの定義にて以下なコメントがある (include/linux/namei.h)。

/*
 * The bitmask for a lookup event:
 *  - follow links at the end
 *  - require a directory
 *  - ending slashes ok even for nonexistent files
 *  - internal "there are more path compnents" flag
 *  - locked when lookup done with dcache_lock held
 */

あら、定義も以下に引用。

#define LOOKUP_FOLLOW		 1
#define LOOKUP_DIRECTORY	 2
#define LOOKUP_CONTINUE		 4
#define LOOKUP_PARENT		16
#define LOOKUP_NOALT		32
/*
 * Intent data
 */
#define LOOKUP_OPEN		(0x0100)
#define LOOKUP_CREATE		(0x0200)
#define LOOKUP_ACCESS		(0x0400)

32 って 0b100000 なので 0x30 ?
逆に 0x100 って 0b1000000なのか。10 進だと 64。上記コメントは別途確認する事にしといて今日は早めに寝ます。