Frage an C Experten: fgets im sysfs will nicht richtig

  • Mal eine Frage an die C und Linux Experten hier.


    Ich will die Temperatur aus dem sysfs auslesen.
    Leider bekomme ich immer den selber Wert, auch wenn der sich geändert hat.


    Hier mal eine abgespeckte Version ohne jegliche Fehlerbehandlung.
    Es gibt zwei Stellen an denen aus dem sysfs gelesen wird. Einmal in der while loop und einmal die fkt gettemp. In der While loop öffne ich das file nur einmal. Leider bekomme ich hier auch immer den selben Wert. In der Fkt wird jedes mal das File neu auf gemacht und gelesen. Das liefert immer den richtigen Wert.



    Code
    read temp=71500
    read2 temp=71500
    read temp=71500
    read2 temp=71500
    read temp=71500      <--------------- hier gibt es den Unterschied
    read2 temp=71000    <--------------- hier gibt es den Unterschied


    Interessant ist es das die fkt gettemp immer den richtigen Wert liefert. Das liegt wohl daran das ich dort den fd auf und wieder zu mache. In der while schleife mache ich jedoch auch ein rewind(in) was den fd ja auch wieder an den Anfang setzt. Ich verstehe nicht warum die eine Möglichkeit geht und die andere nicht. Ich will eigentlich nicht immer den fd schließen und wieder auf machen nur um den Wert zu lesen.


    Hat jemand eine Idee?

  • Hallo,


    mach mal
    int ret;
    ret = fseek(stream, 0L, SEEK_SET) ;


    und schau ob ret = 0 ist, also ob erfolgreich war.


    oder solange Du die Datei offen hast, kann kein anderer sie ändern


    das gäbe sonst auch chaos
    wenn einer zeichenweise da die
    71500 mit
    6 9 9 9 9 überschreibt


    und liest in der Pause nach der ersten 9 das file und kriegs dann


    69500


    Frithjof

    vdr 1.7.23 suse 12.1 64 Bit 1xTTS2-6400 HD-USB: 24TB
    vdr 1.7.23 suse 11.3 64 Bit 1xTTS2-6400, 1xTTS2-3200 + ci HD:2TB
    vdr 2.2.0 Raspberry pi HD-USB: 2TB (Garten)

  • Hi,
    Das ist sehr einfach zu erklaeren.
    Sobald Du auf eine "Datei" in /sys zugreifst, wird der entsprechende Treiber aktiviert welcher die Datei fuelllt.
    Dies passiert einmalig, d.h. erst wenn Du "neu" drauf zugreifst gibts auch neue Daten.

  • Ok ist das nur bei /sys so oder auch bei /proc ?
    Also komme ichum ein fclose -> fopen nicht rum.


    helau
    schon eine Ahnung was ich mache? :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!