Hallo Experten!
Bin Anfänger, daher wahrscheinlich für Euch einfach zu lösen:
Ich schalte LEDs eines Boards mit "echo 1 > /dev/led1" oder "echo 0 >
/dev/led1" an und aus.
Wie sieht das ganze aus, wenn ich es in C programmieren will?
fd=open("/dev/led1", WR_ONLY);
write(fd, 1, 1);
funktioniert leider nicht?
Danke schonmal.
Pit schrieb:> fd=open("/dev/led1", WR_ONLY);> write(fd, 1, 1);>> funktioniert leider nicht?
hätte es auch so gemacht, aber was heist
> funktioniert leider nicht?
geht das open schief, geht das write schief, bekommst du eine
fehlermeldung, versteht es der compiler nicht?
Danke für die Antworten. Jetzt gehts. So muss es aussehen damits
funktioniert:
fd=open("/dev/led1", O_RDWR);
write(fd, "1", 1);
Also als erstes mal das Gerät zum Lesen und Schreiben öffnen, dann die 1
in Anführungszeichen.
Danke!
Pit schrieb:> Also als erstes mal das Gerät zum Lesen und Schreiben öffnen, dann die 1> in Anführungszeichen.
1 in Anführungszeichen ist ein String. Also mit \n terminiert.
Der Gedanke
CR schrieb:> write(fd, "1\n", 2);
war also Richtig, nur das 0x31 und \0 (also 0x00) gesendet werden sollte
le x. schrieb:> was verbirgt sich denn hinter "/dev/led1"?>
eine virtuelle Datei, die von einem süeziellen Kernelmodul verwaltet
wird. Schreibt man in diese "Datei" etwas rein, setzt das Kernelmodul
den "Dateiinhalt" in entsprechende I/O-Kommandos um.
...mal ganz populärwissenschaftlich ausgedrückt...
/dev/lde schrieb:> eine virtuelle Datei, die von einem süeziellen Kernelmodul verwaltet> wird. Schreibt man in diese "Datei" etwas rein, setzt das Kernelmodul> den "Dateiinhalt" in entsprechende I/O-Kommandos um.
echo str_replace("ü", "p", $str);
also ein handelsübliches character-device? ;-)
A. K. schrieb:> Faulpelze machen aus dem Dreizeiler open/write/close einen Einzeiler:> system("echo 1 > ...")
System ist böse, lernt man doch immer wieder ;-) ! Nebenbei ist das doch
meher als Overkill. der Kernel muss eine kompletten Prozess ansetzen nur
um eine "1" in ein Characater device zu schreiben.
Wer so Optimiert, der hat ein an der Waffel ehrlich. Wenn man das öfter
in einen Programm braucht, pack es in eine Funktion oder ein marco.
imonbln schrieb:> System ist böse, lernt man doch immer wieder ;-) !> Nebenbei ist das doch meher als Overkill.
Ich weiss auch nicht, ob ich das im produktiven Einsatz wirklich so
machen würde. Aber eine Möglichkeit für quick-and-dirty wärs schon.
Natürlich ist das Overkill. Der Punkt ist nur: Ab wann spielt Overkill
eine Rolle? Wenn ich im Programm intensives Bitbanging betreibe, dann
schon. Wenn ich anfangs einmal irgendeine Einstellung vornehme, dann
spielt dieser Aspekt hingegen keine Rolle.
Zum Thema Overkill habe ich ohnehin längst eine eher lockere Beziehung,
da ich längst mehr in Perl als in C mache. Passt besser zu den Aufgaben,
ist schneller fertiggestellt und in den allermeisten Fällen auch schnell
genug.