Мне интересно, есть ли эквивалент Windows для Linux mkfifo. В эквиваленте я имею в виду способ создания файлов с st_mode S_IFIFO. Спасибо за ответы.
Пример файла Fifo Windows
Ответ 1
Должно быть возможно некоторое эмулировать поведение mkfifo
. Я реализовал нечто подобное много лет назад для OS/2, которое очень похоже на WinXX по отношению к файловой системе.
Основное ограничение заключается в том, что Windows использует зарезервированные имена файлов для труб: \\.\pipe\pipename или \\servername\pipe\pipename по сети (что может быть очень полезно). Но вы не сможете напрямую использовать произвольные имена fifo. Названиям труб нужен префикс \\.\Pipe \.
Однако приложение может создать канал с CreateNamedPipe
с PIPE_ACCESS_DUPLEX
и, например, имя GUID и создать символическую ссылку на этот канал в целевом каталоге с помощью DeviceIoControl
/FSCTL_SET_REPARSE_POINT
. Это должно быть очень близко к mkfifo
.
Недостатком является то, что приложение, которое обслуживает трубу, должно работать до тех пор, пока существует экземпляр канала. И, конечно же, он должен очистить символическую ссылку при завершении. Кроме того, ему необходимо прочитать все данные из трубы и записать их снова. Не уверен, что это может быть реализовано с нулевой копией.
Есть еще некоторые аспекты. Например. если вы хотите удалить свой эмулируемый FIFO, вам необходимо отслеживать удаление символической ссылки и прекратить рабочий процесс в этом случае.
Извините, у меня нет среды разработки Windows, поэтому я не могу проверить этот подход.