У меня есть подпрограмма, в которой я пытаюсь заблокировать только один файл (по одному за раз) и удерживать эту блокировку на определенное количество заданного времени (через sleep). Я пытаюсь добавить функциональность, позволяющую пользователю разблокировать текущий заблокированный (спящий) файл всякий раз, когда он нажимает определенный ключ, например клавишу ввода. Я просто не уверен, в каком направлении идти, чтобы заставить это работать. Каждая попытка использования 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";
}
Извините за отложенный ответ, но он выглядит как его работа. Я просто положил «возвращение»; во внутреннем цикле while, когда он обнаружил ключ, он выйдет из вашей подпрограммы, вернется к моему и закроет (разблокирует) файл. Спасибо за вашу помощь. – iCanHasFay