共有ディスクのファイルシステムではseekできない。
VirtualBoxにインストールしたUbuntu JeOSにApache + Perlを入れて
ちょこちょこスクリプトを書いていたんだけど、
共有ディスク上のファイルに追記しようとすると、
どうも書き込み開始位置がおかしくなるようで、上手く動かない。
論より証拠。
こんな簡単なスクリプトを書いてみる。
#!/usr/bin/perl for ($i = 0; $i < 5; $i ++) { open(WRITE, ">>/pub/test.txt"); print WRITE "${i}\n"; close WRITE; }
/pubが共有ディスクのディレクトリ。
出力されたファイルはこんな感じ。
0 1 2 3 4
先頭に空白が挿入されているように見えるが、
空白部分は実際は空白(0x20)ではなく、Null(0x00)になっている。
openした後に seek(WRITE, 0, 2); など入れてみても、結果は同じ。
どうもseekに相当するものがきちんと動かないらしい。
バグなのか仕様なのかは知らないし調べてもないけど、
今のところ、共有ディスクはアプリケーションから直接読み書きするのではなく、
あくまでもデータ共有用の一時フォルダとして利用すべき、ということ。