谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

共有ディスクのファイルシステムでは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に相当するものがきちんと動かないらしい。


バグなのか仕様なのかは知らないし調べてもないけど、
今のところ、共有ディスクはアプリケーションから直接読み書きするのではなく、
あくまでもデータ共有用の一時フォルダとして利用すべき、ということ。