私は、ファイルのセットを(一度に1つずつ)排他的にロックし、そのロックを一定時間(スリープを介して)保持しようとしているサブルーチンを持っています。ユーザーがEnterキーなどの特定のキーを押すたびに、現在のロックされた(スリープ状態の)ファイルのロックを解除できる機能を追加しようとしています。これを機能させるためにどの方向に進むべきかわかりません。STDINを使用して\nをチェックするすべての試みは機能していません。ありがとう。
以下はサブルーチンです。ファイルが必要なディレクトリに移動します。1から指定されたファイルの数までファイルを作成します。ファイルごとに排他ロックがかけられ、指定された時間スリープします。
編集:これについて言及しないのは私のせいですが、このスクリプトはWindows環境で実行されます。理想的には、Perlに含まれていない追加のモジュールのインストールを必要としないソリューションが欲しいです。(これは、breqwasのソリューションのモジュールがWindowsをサポートしていないために発生しました)。ありがとう。
sub lockFiles{
#creates files that are locked for a specific amount of seconds.
chdir("lock files")or die "Unable to enter dir $!\n";
opendir(DIR,".") or die "Can't open the current directory: $!\n";
#file iterator
my $i=1;
#for each file lock it and sleep the given amount of time
while($i<=$numberOfFiles){
open FILE, ">>", "test$i.txt" or die $!;
flock(FILE, 2) or die "Could not lock test$i.txt\n";
print "test$i.txt locked, locking for $timeToSleep seconds\n";
print "Press ctrl+c to kill this\n";
sleep($timeToSleep);
$i++;
close(FILE);
}
closedir(DIR);
#change back to the parent folder
chdir("..") or die "Can't change to the directory: $!\n";
print "subRoutine lockFiles success\n";
}