Forum: PC-Programmierung Linux C - Problem mit Filehandlern


von Mike (Gast)


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

von Frank (Gast)


Lesenswert?

Hallo Mike,

LED1 funktioniert wie erwartet?

Möglicherweise sind Deine Device-Nodes falsch? Schau Dir die mal genauer 
an.
1
ls -l /dev/usrled*

Frank

von Klaus W. (mfgkw)


Lesenswert?

Nebenbei: schliesst du deine FDs auch mal wieder, oder öffnest du nur 
immer neue?

von Hans Ulli K. (Gast)


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

von Simon B. (nomis)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.