Пример файла Fifo для Windows

Мне интересно, существует ли Windows-эквивалент для Linux mkfifo. Под эквивалентом я подразумеваю способ создания файлов с st_mode S_IFIFO. Спасибо за ответы.

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, поэтому я не могу проверить этот подход.

Другие вопросы по тегам