Linuxでとあるコードを書いていたのですが、例えば、
mkdir hoge ln -s hoge hoge_link
のようにして、対象パスがsymlinkだったらリンク先を辿らないlstat()
システムコールで、
static bool check_symlink (char *source) { struct stat sb; if (lstat(source, &sb) != 0) error(EXIT_FAILURE, errno, _("failed to access")); if ((sb.st_mode & S_IFMT) == S_IFLNK) { return true; } /* not symlink */ return false; }
のようなコードを書くとします。
それで、check_symlink("hoge_link")
とかすると当然true
が返ってきます。
一方で、check_symlink("hoge_link/")
とかすると、false
が返ってくるのですねぇ。
こうやって書いてみると当たり前なのですが、これで少しハマってしまいました。