web-dev-qa-db-ja.com

FifoファイルのWindowsの例

Linuxmkfifoに相当するWindowsがあるかどうか疑問に思います。同等の意味で、st_mode S_IFIFOを使用してファイルを作成する方法を意味します。答えてくれてありがとう。

18

mkfifoの動作をある程度エミュレートできるはずです私はそのような多くの何かを実装しました数年前のOS/2は、ファイルシステムに関してはWinXXと非常によく似ています。

主な制限は、Windowsがパイプに予約済みファイル名を使用することです:\\。\ pipe \pipenameまたは\\servername\ pipe \pipenameネットワーク経由(これは非常に便利です)。ただし、任意のFIFO名を直接使用することはできません。パイプ名には\\。\ pipe \プレフィックスが必要です。

ただし、アプリケーションはCreateNamedPipePIPE_ACCESS_DUPLEXを使用してパイプを作成できます。 a GUID name and ターゲットディレクトリにこのパイプへのシンボリックリンクを作成 with DeviceIoControl/FSCTL_SET_REPARSE_POINT。これは非常に近いはずです。 mkfifoに。

欠点は、パイプインスタンスが存在する限り、パイプにサービスを提供するアプリケーションを実行する必要があることです。そしてもちろん、終了時にシンボリックリンクをクリーンアップする必要があります。さらに、パイプからすべてのデータを読み取り、再度書き戻す必要があります。これがゼロコピーで実装できるかどうかわからない。

さらにいくつかの側面があります。例えば。エミュレートされたFIFOを削除できるようにする場合は、シンボリックリンクの削除を追跡し、この場合はワーカープロセスを終了する必要があります。

申し訳ありませんが、Windows開発環境がないため、このアプローチをテストできません。

6
Marcel