strace

まぁLinuxに限らず*nixで動くんだけど,あるプログラムにおいてsyscallがどんな具合で実行されたかを見やすく表示してくれるツール.こいつのソースが読みたい*1

[nodakai@sprawl mp3]$ strace ls
execve("/bin/ls", ["ls"], [/* 60 vars */]) = 0
(略
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
getdents64(3, /* 8 entries */, 4096)    = 384
getdents64(3, /* 0 entries */, 4096)    = 0
close(3)                                = 0
fstat64(1, {st_mode=S_IFREG|0644, st_size=3932, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000
write(1, "dietrich_fischerdieskau\ndietrich"..., 198dietrich_fischerdieskau (← このへん,実際のwrite(2)の出力が混じってる
dietrich_fischerdieskau-schubert_winterreise.m3u
js_bach
js_bach-johannespassion_cd1.m3u
mischa_maisky_violincello
mischa_maisky_violincello-cellosuiten_no1no3no5_jsbach.m3u
) = 198
close(1)                                = 0
munmap(0x40015000, 4096)                = 0
exit_group(0)                           = ?

*1:「物理実験の基礎第一」のテスト勉強をするよりは.