Interprozesskommunikation oder „gehe nicht über sdout „

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
Benutzeravatar
Hightech
Beiträge: 11492
Registriert: So 11. Aug 2013, 18:37

Interprozesskommunikation oder „gehe nicht über sdout „

Beitrag von Hightech »

Kann man aus einem C Programm Daten zu einem Python Programm übertragen ohne über sdout zu gehen?

Oder lieber das C Programm mit Python starten und die Daten so holen?

Linux natürlich.
vobs
Beiträge: 73
Registriert: Sa 6. Aug 2016, 09:42
Wohnort: 70771 Echterdingen
Kontaktdaten:

Re: Interprozesskommunikation oder „gehe nicht über sdout „

Beitrag von vobs »

Hightech hat geschrieben: Fr 9. Sep 2022, 19:59 Kann man aus einem C Programm Daten zu einem Python Programm übertragen ohne über sdout zu gehen?
(...)
Linux natürlich.
Mit 'ner Pipe.
Probier mal: man 3 mkfifo

Grüßle,
Volker
Benutzeravatar
Fritzler
Beiträge: 12603
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Interprozesskommunikation oder „gehe nicht über sdout „

Beitrag von Fritzler »

Du kannst (named) pipes nutzen.
So habe ich es getan um beim RasPi USB Stick Emulator die Dateinamen aus dem C programm rauszupopeln und in Pathon nutzbar zu machen.

C Teil:
https://git.fritzler-avr.de/fritzler/ra ... /pipeing.h
https://git.fritzler-avr.de/fritzler/ra ... /pipeing.c

Schlangenteil:
https://git.fritzler-avr.de/fritzler/ra ... ipeRead.py

Lektüre:
https://www.geeksforgeeks.org/named-pip ... c-program/

Überträgt eben nur bytes, ein protokoll musste dir selber ausdenken
Benutzeravatar
Hightech
Beiträge: 11492
Registriert: So 11. Aug 2013, 18:37

Re: Interprozesskommunikation oder „gehe nicht über sdout „

Beitrag von Hightech »

Danke, grübel ich mal nach. Schwere Kost___.self

Aber, da wird eine Datei erzeugt, oder ist das nur im Ram?

//no comments
Benutzeravatar
sukram
Beiträge: 3117
Registriert: Sa 10. Mär 2018, 18:27
Wohnort: Leibzsch

Re: Interprozesskommunikation oder „gehe nicht über sdout „

Beitrag von sukram »

Hightech hat geschrieben: Fr 9. Sep 2022, 21:58 Danke, grübel ich mal nach. Schwere Kost___.self

Aber, da wird eine Datei erzeugt, oder ist das nur im Ram?
Grundkonzept von allen *nixen: alles ist eine Datei.

Ein Fifo ist eine Datei, die von zwei Prozessen geöffnet wird und dann werden vom Kernel quasi über kreuz die Lese/Schreibbuffer miteinander verbunden. Was der eine schreibt kann der andere lesen. Quasi ein Rohr zwischen den Prozessen. Du kippst auf der einen Seite was rein, das fällt auf der anderen Seite raus.

https://man7.org/linux/man-pages/man7/fifo.7.html
Benutzeravatar
Fritzler
Beiträge: 12603
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Interprozesskommunikation oder „gehe nicht über sdout „

Beitrag von Fritzler »

Hightech hat geschrieben: Fr 9. Sep 2022, 21:58 Aber, da wird eine Datei erzeugt, oder ist das nur im Ram?
"everything is a file"
-> https://de.wikipedia.org/wiki/Everything_is_a_file

Ein Socket unter linux hat auch nurn fileDesrcriptor :mrgreen:
Daher kannste dich mit fprintf auch übers Netzwerk auskotzen.

stdio is auch nurn fileDesrcriptor.
Wenn du also bisher brav mit fprintf auf den stdio geschrieben hast statt mit printf, so ist die Änderung jetzt sehr einfach.
Hightech hat geschrieben: Fr 9. Sep 2022, 21:58//no comments
Der Code ist die Doku :lol:
Antworten