Google グループは Usenet の新規の投稿と購読のサポートを終了しました。過去のコンテンツは引き続き閲覧できます。
Dismiss

排他制御

閲覧: 0 回
最初の未読メッセージにスキップ

news_Hiro_Suzuki

未読、
2003/06/23 20:44:292003/06/23
To:
WINDOWS95でも、排他制御できるPerlってないですか?

Shinji KONO

未読、
2003/06/24 0:59:262003/06/24
To:
河野真治 @ 琉球大学情報工学です。

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(機能と構成)

IIJIMA Hiromitsu

未読、
2003/06/24 6:27:322003/06/24
To:
いいじまです。

> > 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

Shinji KONO

未読、
2003/06/25 0:37:372003/06/25
To:
河野真治 @ 琉球大学情報工学です。

In article <3EF82794...@ht.sakura.ne.jp>, IIJIMA Hiromitsu <delm...@ht.sakura.ne.jp> writes


> UNIX なら各プロセスの間での排他制御には symlink() を使うのが常道なんです
> が、Windows には symlink() はないので、

symlink() が常道とか言われるとなんか違うような気もしますが...

shell から使えるのは symlink かな。でも、どうやるのかは
既に忘れました。(が、OSの課題には入っていたりする...)

IKEDA Kenji

未読、
2003/06/25 1:51:542003/06/25
To:
In article <3988498...@insigna.ie.u-ryukyu.ac.jp>,
ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:

> shell から使えるのは symlink かな。でも、どうやるのかは
> 既に忘れました。(が、OSの課題には入っていたりする...)

どうやるかより、なぜ単なる link を使わないかの方が意味があるような。

--
池田研二 稲城駅前在住

Shinji KONO

未読、
2003/06/25 5:45:222003/06/25
To:
河野真治 @ 琉球大学情報工学です。

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

みたいな形でコマンドを排他的に実行してくれる形式の方が
便利だと思うんだけど。

IIJIMA Hiromitsu

未読、
2003/06/30 0:20:452003/06/30
To:
いいじまです。ちょっと亀ですが。

> > UNIX なら各プロセスの間での排他制御には symlink() を使うのが常道なんです
> > が、Windows には symlink() はないので、
>
> symlink() が常道とか言われるとなんか違うような気もしますが...
>
> shell から使えるのは symlink かな。でも、どうやるのかは
> 既に忘れました。(が、OSの課題には入っていたりする...)

Google で調べてみたら、
http://homepage1.nifty.com/glass/tom_neko/web/web_04.html
なるページに色々と書いてありました。
確実にポータビリティが高いのは mkdir を使う方法です。

IKEDA Kenji

未読、
2003/06/30 1:25:242003/06/30
To:
In article <3EFFBA9D...@ht.sakura.ne.jp>,
IIJIMA Hiromitsu <delm...@ht.sakura.ne.jp> writes:

>> > UNIX なら各プロセスの間での排他制御には symlink() を使うのが常道なんです
>> > が、Windows には symlink() はないので、
>>
>> symlink() が常道とか言われるとなんか違うような気もしますが...
>>
>> shell から使えるのは symlink かな。

UNIX では shell から ln で link(2) が使えるのに、ln -s で symlink(2)
を使うのは何故でしょう?

--
池田研二 稲城駅前在住

Shinji KONO

未読、
2003/06/30 2:11:172003/06/30
To:
河野真治 @ 琉球大学情報工学です。

In article <86wuf4r...@poe.mob.or.jp>, IKEDA Kenji <noro...@mob.or.jp> writes


> UNIX では shell から ln で link(2) が使えるのに、ln -s で symlink(2)
> を使うのは何故でしょう?

元のファイルを一つ余計に作らないといけないからかな。symlink
は指している先が実体ががある必要はないので。

新着メール 0 件