In article <bd86qn$f8i$1...@clarion-ws.inet.clarion.co.jp>, "news_Hiro_Suzuki" <hiro_...@clarion.co.jp> writes
> WINDOWS95でも、排他制御できるPerlってないですか?
Win95 なんか捨てろよってのはおいといて...
Perl はWin32API を呼べるので、それを使えばいいんじゃないですか?
---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球大学工学部情報工学科,
科学技術振興事業団さきがけ研究21(機能と構成)
> > WINDOWS95でも、排他制御できるPerlってないですか?
>
> Win95 なんか捨てろよってのはおいといて...
まあまあ。
ActivePerl は Windows 95 で動きますけど、それではダメですか?
Perl 5.6.1 ないし 5.8.0 ベースのものがほしければ、こちら。
http://www.activestate.com/Products/ActivePerl/
JPerl(これは Perl 5.005_03 ベースのものしかありません)がほしければ、こちら。
http://homepage2.nifty.com/kipp/perl/jperl/
☆
で、本題。
UNIX なら各プロセスの間での排他制御には symlink() を使うのが常道なんです
が、Windows には symlink() はないので、
> Perl はWin32API を呼べるので、それを使えばいいんじゃないですか?
ということになりますね。
open() を使うロック方法ではきちんと排他制御はできませんので。
Win32::API モジュールを使って、CreateFileA API を使うことになるでしょう。
ちょっと試してみたところ、こんな感じでいけそうです。
use Win32::API;
$CreateFileA = new Win32::API('kernel32','CreateFileA',
[P, # LPCTSTR lpFilename
N, # DWORD dwDesiredAccess - use GENERIC_WRITE
N, # DWORD dwShareMode - use zero for sharing with nobody else
N, # LPSECURITY_ATTRIBUTES lpSecurityArrtibutes - use NULL here
N, # DWORD dwCreationDistribution - use CREATE_NEW
N, # DWORD dwFlagsAndAttributes - use FILE_ATTRIBULE_NORMAL
N], # HANDLE hTemplateFile - use NULL here
N);
$CloseHandle = new Win32::API('kernel32', 'CloseHandle', [N], N);
$GENERIC_WRITE = 0x40000000;
$CREATE_NEW = 1;
$FILE_ATTRIBUTE_NORMAL = 0x80;
$INVALID_HANDLE_VALUE = -1;
$hFile = $CreateFileA->Call('.\lockfile', $GENERIC_WRITE, 0, 0, $CREATE_NEW,
$FILE_ATTRIBUTE_NORMAL, 0);
if ($hFile == $INVALID_HANDLE_VALUE)
{
die "lock failed\n";
}
else
{
print "lock success. press Enter to unlock:";
$temp = <>;
$CloseHandle->Call($hFile);
unlink '.\lockfile';
}
========================================================================
飯嶋 浩光 / でるもんた・いいじま http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta mailto:delm...@ht.sakura.ne.jp
In article <3EF82794...@ht.sakura.ne.jp>, IIJIMA Hiromitsu <delm...@ht.sakura.ne.jp> writes
> UNIX なら各プロセスの間での排他制御には symlink() を使うのが常道なんです
> が、Windows には symlink() はないので、
symlink() が常道とか言われるとなんか違うような気もしますが...
shell から使えるのは symlink かな。でも、どうやるのかは
既に忘れました。(が、OSの課題には入っていたりする...)
> shell から使えるのは symlink かな。でも、どうやるのかは
> 既に忘れました。(が、OSの課題には入っていたりする...)
どうやるかより、なぜ単なる link を使わないかの方が意味があるような。
--
池田研二 稲城駅前在住
In article <86u1ae1...@poe.mob.or.jp>, IKEDA Kenji <noro...@mob.or.jp> writes
> > shell から使えるのは symlink かな。でも、どうやるのかは
> > 既に忘れました。(が、OSの課題には入っていたりする...)
> どうやるかより、なぜ単なる link を使わないかの方が意味があるような。
どんな意味があるのかな?
しばらくやって、はまった記憶があるけど... 解決しないまま、そのまま
だなぁ...
別に flock を C と Perl から使う演習はあるので、symlink で
やる必要はないんですけどね。最近では、lockfile なんていう
コマンドがあったりするようなんですが、これも使いづらい
コマンドなんだよな。
lockfile lock-file command
みたいな形でコマンドを排他的に実行してくれる形式の方が
便利だと思うんだけど。
> > UNIX なら各プロセスの間での排他制御には symlink() を使うのが常道なんです
> > が、Windows には symlink() はないので、
>
> symlink() が常道とか言われるとなんか違うような気もしますが...
>
> shell から使えるのは symlink かな。でも、どうやるのかは
> 既に忘れました。(が、OSの課題には入っていたりする...)
Google で調べてみたら、
http://homepage1.nifty.com/glass/tom_neko/web/web_04.html
なるページに色々と書いてありました。
確実にポータビリティが高いのは mkdir を使う方法です。
>> > UNIX なら各プロセスの間での排他制御には symlink() を使うのが常道なんです
>> > が、Windows には symlink() はないので、
>>
>> symlink() が常道とか言われるとなんか違うような気もしますが...
>>
>> shell から使えるのは symlink かな。
UNIX では shell から ln で link(2) が使えるのに、ln -s で symlink(2)
を使うのは何故でしょう?
--
池田研二 稲城駅前在住
In article <86wuf4r...@poe.mob.or.jp>, IKEDA Kenji <noro...@mob.or.jp> writes
> UNIX では shell から ln で link(2) が使えるのに、ln -s で symlink(2)
> を使うのは何故でしょう?
元のファイルを一つ余計に作らないといけないからかな。symlink
は指している先が実体ががある必要はないので。