readdir()のd_reclen
readdir()が返すdirentの d_reclenフィールドなんだけど、ナんのサイズなんだろうとか、今まで気にもしていなかったんだけど気になりだすと気になって仕方ない。
_example.so:: inode: 2007169, offset: 2147483647, len: 24, type: regula example.c:: inode: 2007166, offset: 446725204, len: 24, type: regula example.i:: inode: 2007167, offset: 1825080369, len: 24, type: regula example.py:: inode: 2007168, offset: 225954371, len: 24, type: regula example_wrap.c:: inode: 2007165, offset: 635765763, len: 28, type: regula delegate_test.cs:: inode: 2007176, offset: 844397602, len: 28, type: regula try.cs:: inode: 2007180, offset: 1850912454, len: 20, type: regula
てな感じ(きっと勘のいい人なら既にここでわかってしまうんだろう・・・)。
-rwxr-xr-x 1 kuro kuro 35126 2007-10-09 12:08 _example.so -rw-r--r-- 1 kuro kuro 236 2007-10-09 12:01 example.c -rw-r--r-- 1 kuro kuro 304 2007-10-09 12:08 example.i -rw-r--r-- 1 kuro kuro 1674 2007-10-09 15:50 example.py -rw-r--r-- 1 kuro kuro 95360 2007-10-09 15:50 example_wrap.c -rw-r--r-- 1 kuro kuro 198 2007-10-11 11:06 decimal.cs -rw-r--r-- 1 kuro kuro 351 2007-10-11 11:29 delegate_test.cs
実ファイルサイズとは全然関係なさそう。悩む前にカーネルソースを見てしまった。
// fs/readdir.c - line 149 int reclen = ALIGN(NAME_OFFSET(dirent) + namlen + 2, sizeof(long));
なんだよdirent自体のサイズか。これって record length・・・というのか。。。 entlenとか。。。いや、もっとわかんないか。
確かにこうなった。
D:: inode: 1419992, offset: 1583043187, reclen: 16, type: direct DD:: inode: 1419993, offset: 1666283364, reclen: 16, type: direct DDD:: inode: 1419994, offset: 21093361, reclen: 16, type: direct DDDD:: inode: 1419995, offset: 2147483647, reclen: 16, type: direct DDDDD:: inode: 1419996, offset: 934741300, reclen: 20, type: direct DDDDDD:: inode: 1419997, offset: 923284620, reclen: 20, type: direct DDDDDDD:: inode: 1419998, offset: 1808362381, reclen: 20, type: direct DDDDDDDD:: inode: 1419999, offset: 1447304835, reclen: 20, type: direct DDDDDDDDD:: inode: 1420000, offset: 1810308308, reclen: 24, type: direct DDDDDDDDDD:: inode: 1420001, offset: 902093765, reclen: 24, type: direct DDDDDDDDDDD:: inode: 1420002, offset: 2050576679, reclen: 24, type: direct DDDDDDDDDDDD:: inode: 1420003, offset: 1441011620, reclen: 24, type: direct DDDDDDDDDDDDD:: inode: 1420004, offset: 1560707401, reclen: 28, type: direct DDDDDDDDDDDDDD:: inode: 1420005, offset: 264453376, reclen: 28, type: direct DDDDDDDDDDDDDDD:: inode: 1420006, offset: 2012088305, reclen: 28, type: direct DDDDDDDDDDDDDDDD:: inode: 1420007, offset: 545399702, reclen: 28, type: direct DDDDDDDDDDDDDDDDD:: inode: 1420008, offset: 1349153386, reclen: 32, type: direct DDDDDDDDDDDDDDDDDD:: inode: 1420009, offset: 1304388095, reclen: 32, type: direct DDDDDDDDDDDDDDDDDDD:: inode: 1420010, offset: 15462277, reclen: 32, type: direct DDDDDDDDDDDDDDDDDDDD:: inode: 1420011, offset: 2042488419, reclen: 32, type: direct DDDDDDDDDDDDDDDDDDDDD:: inode: 1420012, offset: 908934656, reclen: 36, type: direct DDDDDDDDDDDDDDDDDDDDDD:: inode: 1420013, offset: 1049386901, reclen: 36, type: direct DDDDDDDDDDDDDDDDDDDDDDD:: inode: 1420014, offset: 2016688392, reclen: 36, type: direct DDDDDDDDDDDDDDDDDDDDDDDD:: inode: 1420015, offset: 838188875, reclen: 36, type: direct DDDDDDDDDDDDDDDDDDDDDDDDD:: inode: 1420016, offset: 111327874, reclen: 40, type: direct DDDDDDDDDDDDDDDDDDDDDDDDDD:: inode: 1420017, offset: 1490345728, reclen: 40, type: direct DDDDDDDDDDDDDDDDDDDDDDDDDDD:: inode: 1420018, offset: 686265667, reclen: 40, type: direct DDDDDDDDDDDDDDDDDDDDDDDDDDDD:: inode: 1420019, offset: 1130391025, reclen: 40, type: direct DDDDDDDDDDDDDDDDDDDDDDDDDDDDD:: inode: 1420020, offset: 1217789290, reclen: 44, type: direct
もう少し悩んでから解答ミロよ>自分。
とか思って余計に自分が情けなくなった。
追記:
更に、manを見ると
unsigned short d_reclen; /* length of this record */
書いてあるじゃん・・・
もっともっと自分が情けなくなった。