「もっとがんばってもらわないと」とか言われても、 どっちにがんばればいいものやら。
結局シンボリックリンクを追うのは stat(2) に任せることにしたので段数を指定する必要はなくなりました。 が、そのかわりに Windows でドツボにはまると。
ruby-dev では Tietew さんの試験パッチが出てますが、 せっかくの機会なので Windows API を使う練習をしてみました。
// fileid.c -- print file ID (works only with NTFS)
// Usage: ./fileid.exe filename
#include <windows.h>
#include <stdio.h>
int
main(int argc, char **argv)
{
HANDLE f;
BY_HANDLE_FILE_INFORMATION info;
BOOL ok;
if (argc < 2) {
puts("too few argc");
exit(1);
}
f = CreateFile(argv[1], 0, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (f == INVALID_HANDLE_VALUE) {
puts("CreateFile failed");
exit(1);
}
ok = GetFileInformationByHandle(f, &info);
if (!ok) {
puts("GetFileInformation failed");
CloseHandle(f);
exit(1);
}
printf("%08x %08x\n", info.nFileIndexHigh, info.nFileIndexLow);
CloseHandle(f);
exit(0);
}
stdio 使っていいのかな。 ま、動いてるみたいだから今回はこれでいいや。