Aktuelle Zeit: 19.10.2019 19:44

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Verständnisfrage zu ConnectNamedPipe_()
BeitragVerfasst: 14.10.2015 20:43 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Hallo,

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:
; 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

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu ConnectNamedPipe_()
BeitragVerfasst: 14.10.2015 21:37 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Da Du die NamedPipe gerade erst erstellt hast, biste auch noch verbunden, somit ist ConnectNamedPipe überflüssig.
Es kann aber nicht schaden, es vorsichtshalber auszuführen!

Ansonsten habe ich das Beispiel mal in Hinsicht auf 64-Bit und Unicode erweitert, weil sonst kannst Du es spätestens ab
PB 5.50 nicht mehr nutzen :mrgreen:
Code:
EnableExplicit
; Beispielprogramm für Named Pipes (very quick, very dirty ...)
; stbi 2007

#BUFSIZE = 1024
Define PipeName.s = "\\.\pipe\pbsamplepipe"

; Named Pipe einrichten
Define hPipe.i = 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
Define handle.i = OpenFile(#PB_Any, PipeName)
WriteString(handle, "Hello Pipe!", #PB_Ascii)
CloseFile(handle)

; einen Blick in die Pipe werfen
Define BytesAvailable.l = 0
PeekNamedPipe_(hPipe, 0, 0, 0, @BytesAvailable, 0)

; aus der Pipe lesen
Define Buffer.s = Space(BytesAvailable)
Define BytesRead.l = 0
ReadFile_(hPipe, @Buffer, BytesAvailable, @BytesRead, 0)
Debug PeekS(@Buffer, -1, #PB_Ascii)

; aufräumen
DisconnectNamedPipe_(hPipe)
CloseHandle_(hPipe)

End


Gruß
Thomas

_________________
PureBasic 5.71 | SpiderBasic 2.21 | Windows 10 Pro (x64) | Linux Mint 19.2 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu ConnectNamedPipe_()
BeitragVerfasst: 14.10.2015 21:54 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Danke für deine Rückmeldung und das Überarbeiten. :allright:

Wenn ich das richtig sehe, sind das...
- #PB_Ascii beim schreiben und peeken
- Integer für handles

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu ConnectNamedPipe_()
BeitragVerfasst: 14.10.2015 22:03 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Kurzer hat geschrieben:
Wenn ich das richtig sehe, sind das...
- #PB_Ascii beim schreiben und peeken
- Integer für handles

Genau :allright:
CreateNamedPipe_() übergibt den Namen schon korrekt (interne Umwandlung nach CreateNamedPipe/A/W)

und das wichtigste, EnableExplicit!
aber das wird immer wieder ignoriert :mrgreen:

_________________
PureBasic 5.71 | SpiderBasic 2.21 | Windows 10 Pro (x64) | Linux Mint 19.2 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu ConnectNamedPipe_()
BeitragVerfasst: 14.10.2015 22:10 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
ts-soft hat geschrieben:
und das wichtigste, EnableExplicit!
aber das wird immer wieder ignoriert :mrgreen:


Korrekt, aber nicht von mir - *hüstel* EnableExplicit ist mein zweiter Vorname. :lol:
Ich habe den Testcode hier einfach 1 zu 1 rein geworfen, wie ich ihn im Forum vorgefunden habe.
Meine Routinen, die ich daraus erstelle, werden als Module erstellt... und die fangen genau so an:

Code:
Module NamedPipes
   EnableExplicit
   
   ;*************************************************************************
   ;* Global Constants
   ;*************************************************************************

   #MAXPIPES = 10
   #BUFFERSIZE = 1024
   #DEFAULTTIMEOUT = 0

[...]


:wink:

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu ConnectNamedPipe_()
BeitragVerfasst: 14.10.2015 23:37 
Offline

Registriert: 21.11.2013 21:17
Wohnort: Schweiz
Kurzer hat geschrieben:
Code:
;*************************************************************************
   ;* Global Constants
   ;*************************************************************************

Gibts den auch nicht globale Constanten :?:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu ConnectNamedPipe_()
BeitragVerfasst: 15.10.2015 00:14 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Jein. Die Konstanten in einem Modul sind nur Modul-Global. Diese können exportiert (DeclareModule) werden oder eben nicht.

Aber ich weiß schon was Du meinst :mrgreen:

_________________
PureBasic 5.71 | SpiderBasic 2.21 | Windows 10 Pro (x64) | Linux Mint 19.2 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu ConnectNamedPipe_()
BeitragVerfasst: 15.10.2015 09:48 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
NeoChris hat geschrieben:
Gibts den auch nicht globale Constanten :?:


Berechtigte Frage, die Antwort hat ts-soft ja schon gegeben.
Ehrlich gesagt, habe ich mir bei den Konstanten da keine Gedanken gemacht. Ich habe die Abschnittsbeschreibung in dem Fall einfach genau so gestaltet, wie bei den anderen Abschnitten auch (also Variablen, Strukturen, Prozeduren usw). Eben inkl. der Eigenschaft bzw. des Scopes, daher in dem Fall das "Global" davor. Das hatte ich aber schon auch so gemacht, bevor es die Module gab, da war's dann erst recht doppelt gemoppelt. :lol:

Das ganze steckt in einem Template-Gerüst, dass ich mir bei neuen Projekten ins Fenster hole... Einmal angelegt, nie weider drüber nachgedacht. Zumindest ist die Aussage der Beschreibung ja nicht falsch. :mrgreen:

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verständnisfrage zu ConnectNamedPipe_()
BeitragVerfasst: 15.10.2015 21:11 
Offline

Registriert: 21.11.2013 21:17
Wohnort: Schweiz
thx für eure Antworten :allright: :)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye