Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Модуль для инкрементного touch файла


Автор: Logo 14.7.2016, 14:19
Не смог найти модуль на CPAN, возможно кто-то знает? Нужен модуль для создания файла с именем, к которому добавлено "_N", если такой файл уже существует.
Можно конечно написать простой цикл
Код

my $file_name_tpl = '...';
my $file_name = $file_name_tpl;
my $i = 0; 
while(-e $file_name) {
    $file_name = $file_name_tpl . "_" . ++$i;
}
touch($file_name);

Но это будет по понятным причинам не потокобезопасно (т.к. после того как мы прошли цикл while другой процесс может в это время создать файл с таким же именем).

Автор: Bulat 15.7.2016, 15:06
А что мешает семафорить?

Автор: Logo 23.7.2016, 20:43
Правильно тут использовать sysopen с флагами O_CREAT|O_WRONLY|O_EXCL и пробовать снова, если произошла ошибка "Файл существует". Но поскольку в моем случае вероятность конфликта все же мизерная, не стал усложнять код.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)