Äquivalent zu echo



  • Hallo!

    Ich kann einem Linux Kernel Treiber per echo über den Terminal steuern.
    Eigentlich geht es nur um eine LED ein/auszuschalten.

    für an:

    echo "LED1 1" > /dev/fp-led
    

    für aus:

    echo "LED1 0" > /dev/fp-led
    

    Nun habe ich das in c so geschrieben:

    FILE *f;
    
    f = fopen("/dev/fp-led", "w");
    if(f)
    {
      fprintf(f, "LED1 1");
      fclose(f);
    }
    

    Aber es geht nicht!?



  • Definiere "geht nicht".
    Compilerfehler? Linkerfehler? Crash? Passiert nichts?
    Schuss ins Blaue: Du hast keine Schreibrechte.



  • Da fehlt das '\n' am Ende.



  • Ok, etwas dürftig beschrieben...

    Kompiliert und läuft ohne Fehlermeldung durch.

    Habe es um ferror erweitert:

    f = fopen("/dev/fp-led", "w");
    if(f)
    {
      fprintf(f, "LED1 1\n");
      log("ferror: %d", ferror(f));
      fclose(f);
    }
    

    Ausgabe: ferror: 0

    Aber die LED wird nicht eingeschaltet.
    Gerade mit echo nochmal probiert, da geht es ohne Probleme.

    Gibt es noch andere Möglichkeiten einen String zu einem Treiber zu schicken?



  • Ich hätte noch an fflush(f) gedacht ...
    ... aber das wird bei fclose auch gemacht.



  • echo gibt noch einen Zeilenumbruch aus, Dein Code nicht.



  • SG1 schrieb:

    echo gibt noch einen Zeilenumbruch aus, Dein Code nicht.

    Aber das "\n" habe ich hinzugefügt, oder reicht das nicht?



  • Ah, Mist, hatte nur den ersten Code angeguckt.



  • Du kannst ja noch ein Programm probieren:

    int main () {
      printf("LED1 1\n");
    }
    

    und dann so wie echo aufrufen:

    Programm > /dev/fp-led
    

    Dann weißt du zumindest, ob der Text richtig ist.



  • Komisch, ich habe den Code nun zusammen geschrumpft um zu sehen welche Methode geht.

    Also das mit mehreren Varianten:

    f = fopen("/dev/fp-led", "w");
    fprintf(f, "LED1 1\n");
    fclose(f);
    

    Mal mit "w", mal mit "w+" usw.

    Jetzt schaltet die LED. 😕


Log in to reply