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.
#include <stdio.h>
#include <sys/file.h>
#define INPUT "/sys/class/hwmon/hwmon0/device/temp2_input"
int gettemp(){
FILE *in;
char sbuf[255];
in = fopen( INPUT , "r" );
fgets(sbuf, 255, in);
fclose(in);
return atoi(sbuf);
}
int main(const int argc, const char const *argv[])
{
FILE *in;
int temp = 0;
char sbuf[255];
struct timeval xTimeValue;
// open file to read temp
in = fopen( INPUT , "r" );
printf("enter service loop\n");
while(1) {
rewind(in); //<----------- setzt den FD wieder an den Anfang
xTimeValue.tv_sec = 1;
xTimeValue.tv_usec = 0;
// timer
(void)select(0, NULL, NULL, NULL, &xTimeValue);
fgets(sbuf, 255, in); // <------------ liefert immer den selben Wert was aber falsch ist
printf("read temp=%d \n", atoi(sbuf));
printf("read2 temp=%d \n", gettemp());
}//end while(1)
fclose(in);
}//end main
Alles anzeigen
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?