Frage zu FiFo C --> PHP und zurück

  • Hallo,

    ich muß zugeben - ich habe mit FiFo's unter C und PHP noch nie was gemacht und daher stellen sich ein paar grundsätzliche Fragen.

    Erst mal zu dem, was ich machen möchte:

    Ich habe ein C Programm, was eine Art Gerätesteuerung macht und auch immer laufen muß. (An dem Gerät ist ein 100mW Laser, der schaltungstechnisch gesperrt wird, wenn der Raspberry / oder das Programm abstürtzt - Stichwort: Lasersicherheit).

    Ich möchte zunächst das Ganze über ein Web-Interface steuern, ggf. später noch einen TCP Kanal dazuprogrammieren.

    Nun ist das Problem, wie man die Daten vom PHP in's C und andersherum bekommt.

    Ich habe dazu 2 FIFO's (mkfifo) erzeugt. Eine FIFO dient als Kanal vom PHP zum C und die andere ist für die andere Richtung da.
    Eigentlich hätte ich gedacht, daß die FiFo etwa so funktionieren, wie in Labview die Queues, aber dem scheint nicht so zu sein.

    Kann ich eine FiFo immer auslesen, egal ob etwas drinnsteht oder nicht - kann man das irgendwie umstellen?
    z.B. Ich sage dem C Programm: "mache Messung" und warte dann, bis an der anderen FiFo Daten anliegen (halt mit einem Timeout). Momentan liest der halt nichts und irgendwann kommen dann mal Daten und ich muß mir das alles erst wieder zusammenbauen.

    Genau so bei dem Datenformat. Egal, wie langsam ich die Daten in die FiFo schaufele - die kommen immer als eine Zeile am anderen Ende raus.
    z.B.: ich schiebe: 1, 2, 3, 4 .. usw im Abstand von 100ms in die Fifo und lese mit dem PHP das auf der anderen Seite ein. Bekomme ich: 1 2 3 4 (als ein String) und die Zahlen sind von einem 0xB6 und 0x04 getrennt. Warum ist das so?

    Sorry, falls die Fragen etwas doof sind, ich werde aus den FiFo Beschreibung, die es so im Netz gibt einfach nicht schlau...

  • Die Fifos sind recht speziell, der Leser muss warten bis der Schreiber die Pipe aufmacht ...

    Das kann man eventuell mit NONBLOCK abstellen, aber wenn es eine Queue sein soll,
    wuerde ich auch eine Queue nehmen.

    In PHP heissen die Funktionen fuer die Queues msg_get_queue, msg_receive und es gibt noch weitere.

    Auf der C-Seite nach POSIX Message Queues suchen.

  • Das mit dem öffnen der FiFo habe ich hinbekommen.

    Das C Programm wartet, bis im PHP was passiert (also die Fifo zum lesen geöfnet wird).
    Danach wartet das PHP, bis das C die FiFo öffnet (die zweite)

    So eine Art Handshake.

    Momentan

  • Das mit dem öffnen der FiFo habe ich hinbekommen.

    Das C Programm wartet, bis im PHP was passiert (also die Fifo zum lesen geöfnet wird).
    Danach wartet das PHP, bis das C die FiFo öffnet (die zweite)

    So eine Art Handshake.

    Momentan

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!