Ä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-ledfür aus:
echo "LED1 0" > /dev/fp-ledNun 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 beifcloseauch 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-ledDann 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.
