Linux "echo 1 > /dev/." in C programmieren

Gast #3115169
Lesenswert?

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.
Gast #3115180
Lesenswert?

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?
Gast #3115309
Lesenswert?

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!
Gast #3115525
Lesenswert?

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...
Gast #3117445
Lesenswert?

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.
#3117455
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren