Подтвердить что ты не робот

В Perl, как мне безопасно создать временный FIFO?

Чтобы сравнить с diff соседние записи из файла, я создал два FIFOs, разветвленные дети, чтобы предоставить свои записи, и захватили вывод

diff -ub $previous $current

где скаляры содержат пути FIFO-типа, как работает bash замена процесса.

Это не программа, которая должна быть пуленепробиваемой, но если да, то как бы создать временные FIFO, чтобы избежать условия гонки и других уязвимостей? Представьте себе File::Temp имеет двоюродного брата File::Temp::FIFO: какова будет последняя реализация?

4b9b3361

Ответ 1

Как создать временный каталог (a la mkdtemp()), чтобы избежать условий гонки, а затем разместить там свои FIFO?

Например:

use File::Temp qw(tempdir);
use File::Spec::Functions qw(catfile);
use POSIX qw(mkfifo);

my $dir = tempdir(CLEANUP=>1);
my $fifo0 = catfile($dir, "fifo0");
mkfifo($fifo0, 0700) or die "mkfifo($fifo0) failed: $!";
my $fifo1 = catfile($dir, "fifo1");
mkfifo($fifo1, 0700) or die "mkfifo($fifo1) failed: $!";

print "FIFO #0: $fifo0\n";
print "FIFO #1: $fifo1\n";

Ответ 2

Предполагая, что все окончания процесса связаны с созданными вами FIFO, вы не можете просто удалить их из файловой системы? Открытые дескрипторы файлов будут препятствовать удалению FIFO, но к нему не могут быть прикреплены новые дескрипторы, и после того, как существующие дескрипторы файлов будут закрыты, сам FIFO исчезнет.