für ein kleines Tool arbeite ich mich gerade in die Thematik der NamedPipes ein. Dazu habe ich mir zum Verstehen des ganzen ein Beispiel hier aus dem Forum genommen - siehe Sourcecode unten.
Was ich nicht verstehe ist, dass das Schreiben und Lesen in/aus der Pipe auch funktioniert, wenn man die Zeile 14 weglässt "ConnectNamedPipe_(hPipe, 0)".
So wie ich das verstanden habe, ist diese Funktion dafür da den Server an seiner zuvor erzeugten Pipe anzumelden. Warum Funktioniert das ganze auch ohne diese Anmeldung?
Kennt sich da jemand genauer mit aus?
Gruß Kurzer
Code: Alles auswählen
; Beispielprogramm für Named Pipes (very quick, very dirty ...)
; stbi 2007
#BUFSIZE = 1024
PipeName.s = "\\.\pipe\pbsamplepipe"
; Named Pipe einrichten
hPipe.l = CreateNamedPipe_(PipeName, #PIPE_ACCESS_DUPLEX, #PIPE_TYPE_BYTE | #PIPE_READMODE_BYTE | #PIPE_NOWAIT, #PIPE_UNLIMITED_INSTANCES, #BUFSIZE, #BUFSIZE, 0, #Null)
If hPipe = 0
Debug "Fehler beim Erstellen der Named Pipe" : End
EndIf
; zur Named Pipe verbinden
ConnectNamedPipe_(hPipe, 0)
; in die Pipe schreiben
handle.l = OpenFile(#PB_Any, PipeName)
WriteString(handle, "Hello Pipe!")
CloseFile(handle)
; einen Blick in die Pipe werfen
BytesAvailable.l = 0
PeekNamedPipe_(hPipe, 0, 0, 0, @BytesAvailable, 0)
; aus der Pipe lesen
Buffer.s = Space(BytesAvailable)
BytesRead.l = 0
ReadFile_(hPipe, @Buffer, BytesAvailable, @BytesRead, 0)
Debug Buffer
; aufräumen
DisconnectNamedPipe_(hPipe)
CloseHandle_(hPipe)
End