ツッコミの内容は検索サイトからの検索やサイトのレーティングに影響します。そのため問題があるキーワードを含むと思われるツッコミについては、当方の判断で削除することがあります。予めご了承ください。 なお、コメントspamと判断されたツッコミは自動的に消去されます。ご容赦ください。
【改訂新版】Samba [実践]入門 |
Linux教科書 LPICレベル3 300試験 |
マスタリング Nginx |
実践 パケット解析 第2版 |
改訂版 Sambaのすべて |
アンドキュメンテッド Microsoftネットワーク |
その他の書籍は だめだめ日記のおみせ@本店でどうぞ。
Support for full Windows timestamp resolution has been added. This effectively makes us use Windows' full 100ns timestamp resolution if supported by the kernel (2.6.22 and higher) and the glibc (2.6 and higher).
と書いてあったので、lenny (linux 2.6.24 & glibc 2.7) 環境で確認してみました。
時刻を取得する - GetFileTime関数とかを参考にして、Windows 上のシステム時刻からとってきた 100ns 単位の時刻を SetFileTime() するプログラムを作って確認してみたんですが、1秒単位の精度でしか扱ってくれてないっぽく見えます。
考えてみれば、ファイルシステムが EXT3 だったのがいけなかったっぽいです。XFS でやったら問題なくうまくいきました。
以下のようなプログラムをコンパイルして
#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> int main (int argc, char *argv[]) { struct stat sb; stat(argv[1], &sb); printf("Last file access: %s", ctime(&sb.st_atim.tv_sec)); printf("Last file access nano: %d\n", sb.st_atim.tv_nsec); }
stattest という名前のバイナリを作って
$ echo aaa > dame.txt $ stattest dame.txt Last file access: Wed Mar 3 02:05:52 2010 Last file access nano: 799746954
のように、ナノ秒が設定されていることを確認のうえ、Windows 側でもこんなプログラム
#include <windows.h> #include <stdio.h> int main(int argc, char* argv[]) { FILETIME tmTime; HANDLE hFile; GetSystemTimeAsFileTime(&tmTime); hFile = CreateFileA(argv[1], GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); SetFileTime(hFile, NULL, &tmTime, NULL); CloseHandle(hFile); return 0; }
から、Samba 上のファイルの最終アクセス時刻を現在時刻で更新してみて、再度 Linux 側で参照してみると
$ stattest dame.txt Last file access: Thu Mar 4 01:06:19 2010 Last file access nano: 15625000
こんな感じで、ちゃんと更新されてました。もちろん Windows 側から Samba 共有上のファイルを GetFileTime() してちゃんとナノ秒(1秒より細かい単位)の時刻が取得できることも確認しています。
ナノ秒の時刻精度は EXT4 もサポートしているっぽいですね。