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。上記コメントは別途確認する事にしといて今日は早めに寝ます。