Linux C - Problem mit Filehandlern

Gast #3309698
Lesenswert?
• ▲
▼
Hallo zusammen!

Ich habe hier ein merkwürdiges Problem, das ich mir nicht erklären kann. 
Ich habe in meinem System 2 LEDs, die als Gerätedateien vorhanden sind:
/dev/usrled1
/dev/useled2

Der Code sieht so aus:
1
/* open led1 device */
2
int fh_led1;
3
if ((fh_led1=open("/dev/usrled1", O_WRONLY)) == -1)
4
{
5
perror("error opening led1");
6
}
7

8
/* switch led1 off */
9
if ((write(fh_led1, "0", 1)) == -1)
10
{
11
perror("error writing to led1");
12
}
13

14
/* open led2 device */
15
int fh_led2;
16
if ((fh_led2 = open("/dev/usrled2" , O_WRONLY)) == -1)
17
{
18
perror("error opening led2");
19
}
20

21
/* switch led2 off */
22
if ((write(fh_led2, "0", 1)) == -1)
23
{
24
perror("error writing to led2");
25
}
26

27
[...]
28

29
/* switch led1 on */
30
if ((write(fh_led1, "1", 1)) == -1)
31
{
32
perror("error writing to led1");
33
}


Wenn ich jetzt die LED1 einschalte (letzter Absatz im Code), dann geht 
LED2 an!?! Woher kommt das?

Grüsse,
Mike
Gast #3309932
Lesenswert?
• ▲
▼
In der Shell geht das mit dem Befehl echo
Also
echo 1 > /dev/usrled1

Der schmeiss der "1" auch noch ein \n hinterher, also würde ich es im 
C-Code auch machen ...

Aber heute macht man dies über das SysFS
#3310298
Lesenswert?
• ▲
▼
Mike schrieb:
> Ich habe in meinem System 2 LEDs, die als Gerätedateien vorhanden sind:
> /dev/usrled1
> /dev/useled2
[...]
> Wenn ich jetzt die LED1 einschalte (letzter Absatz im Code), dann geht
> LED2 an!?! Woher kommt das?

Sowas kann auch schonmal gerne von einem kaputten Treiber kommen, der 
dann intern durcheinanderkommt.

Hast Du Zugriff/Einfluss auf den Treiber im Kernel?

Grüße,
        Simon

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