[Mew-Win32 00106] flock on win95 ?

Shirai/ 白井秀行 Shirai at example.com
1998年 1月 20日 (火) 10:58:49 JST


白井です。こんにちは。

imのMsgDBをWin95でも動かそうと思い、いろいろやってみました。

以下、やったこと。

1. 以前、activewareのwebで『SDBMなら動く』という内容を読んだ記憶
があるので、Configで
MsgDBType=SDBM
にした。

2. 今、巷で噂のO_BINARYをIM.in/History.pm.inに加えた。

    } elsif ($DBtype eq 'SDBM') {
	if (&win95p){
	    $db = tie %History, 'SDBM_File', $dbfile, O_CREAT|O_RDWR|O_BINARY, &msg_mode(0);
	} else {
	    $db = tie %History, 'SDBM_File', $dbfile, O_CREAT|O_RDWR, &msg_mode(0);
	}
    }

3. ところが、
flock() unimplemented on this platform at D:\USR\PERL\lib/IM/History.pm line 122.
(line 122はいろいろ試験しているので若干ずれているでしょう)
とエラーメッセージが出てしまうので、めんどくさいから、

History.pm.im の 121行目付近
    if (!&win95p){
	unless (flock (HIST_FH, LOCK_EX | LOCK_NB)) {
	    im_warn "history: waiting for write lock ($!)\n";
	    unless (flock (HIST_FH, LOCK_EX)) {
		im_err "history: flock ($!)\n";
		return -1;
	    }
	}
    }
    $locked = 1;

140行目付近
    if ($locked) {
	if (!&win95p){
	    flock(HIST_FH, LOCK_UN);
	}
    }

と誤魔化した(^^;;;
そして、mewはシングルタスク(?)で動作させるようにした。
# バックグラウンドで処理中は何もしないだけ (^^;;;

で、とりあえず、imhistが動作して、Referencesも上にたどれるし、
message/partialも一つにまとめられるようになりました。^^

で、メデタシ、メデタシなのですが、質問/疑問があります。

1. 手元にある『クイックPerl5リファレンス(マイケル オファル著)』に
よるとflockはPerl4、Perl5、(activewareの)Perl-NTで動くと書いてある
のですが、もしかして、私の設定が悪くて動かないだけなのでしょうか?
それとも、Win-NTなら動くのでしょうか?

# 上記リファレンスには『UNIXのflock関数を呼び出す』と書いてある……

2. flockが動かないとすると、本当はどうやって、lockの制御をすれば
良いのでしょうか?
LocalMbox.pm.in のようにロックファイルを作るべきでしょうか?

ちなみにPerlは北口さんビルドのPerl5.004_04です。

# 私も、昨日の夜、Solaris2.4のPerlを5.004→5.004_04にあげました。(^^;



Mew-win32 メーリングリストの案内