Ä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 beifclose
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.