Fifo-Datei des Windows-Beispiel
Frage ich mich, ob es eine Windows-Entsprechung für Linux mkfifo. Durch äquivalente, ich meine Art und Weise Dateien zu erstellen, mit st_mode zuletzt ein.
Vielen Dank für die Antworten.
- Windows hat einfach nicht die "alles ist eine Datei" Abstraktion, die Sie brauchen, um machen,-tun, mit einer named pipe. Finden Sie es zurück, indem Namen von den kernel-namespace-Objekt ist nicht ein problem.
- Ich Frage nur, weil Windows hat _S_IFIFO definiert, vielleicht ist es aber bestimmt nur für einige rückwärts-Kompatibilität. Auch ntfs-3g (aus linux) erkennt einige Dateien als zuletzt ein.
- Hmm, Sie fanden, dass in stat.h, einen header, hatte Microsoft zu emulieren. Technisch möglich durch wickeln eines named pipe-handle, es ist noch nicht eine Datei.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es möglich sein sollte zu emulieren, die
mkfifo
Verhalten zu einem gewissen Grad. Ich habe realisiert, dass so etwas wie vor vielen Jahren für OS/2, die ganz ähnlich wie WinXX mit Bezug zu der Datei system.Die wichtigste Einschränkung ist, dass Windows verwendet reservierte Dateinamen für Rohre: \\.\pipe\pipename oder \\servername\pipe\pipename über das Netzwerk (was sehr nützlich sein kann).
Aber Sie nicht in der Lage sein, um beliebige fifo Namen direkt. Die Namen der pipe müssen die \\.\Rohr - \ - Präfix.
Jedoch kann eine Anwendung erstellen, die ein Rohr mit
CreateNamedPipe
mitPIPE_ACCESS_DUPLEX
und z.B. eine GUID-Namen und erstellen Sie einen symbolischen link auf diese pipe in das Zielverzeichnis mitDeviceIoControl
/FSCTL_SET_REPARSE_POINT
. Dies sollte ganz in der Nähemkfifo
.Der Nachteil ist, dass die Anwendung, die Dienste, das Rohr muss so lange laufen, wie die pipe-Instanz vorhanden ist. Und natürlich sollte es sauber, die symbolischen link auf Kündigung.
Außerdem muss es Lesen alle Daten aus der pipe und schreibt Sie wieder zurück. Nicht sicher, ob das umgesetzt werden kann mit null-Kopie.
Gibt es einige weitere Aspekte. E. g. wenn Sie wollen, um in der Lage zu löschen emuliert FIFO-Sie brauchen, um zu verfolgen das löschen der symbolischen Verknüpfung und beenden der worker-Prozess in diesem Fall.
Tut mir Leid, ich habe keine Windows-Entwicklungsumgebung, so kann ich nicht testen, diesen Ansatz.
> fsutil file createnew fifo 0 > fsutil file createnew socket 1 > attrib +S -H fifo > attrib +S -H socket
\\.\pipe
und ich konnte es nicht funktioniert. Siehe dieser Frage.