Forum: Mikrocontroller und Digitale Elektronik Auslesen mit fopen() auf Raspberry Pi


von RpiTwo (Gast)


Lesenswert?

Hallo,

ich nutze einen Raspberry Pi 2 mit aktuelle Debian Wheezy und Geany 
(Erweiterter Texteditor).


Nun möchte ich gerne einige Werte des Betriebsystems auslesen. Hierzu 
findet man über Google fast ausschließlich Python Skripte. (Kann mich 
mit der Syntax nicht anfreunden und möchte es zeitnah auch nicht).

Nun habe ich das Problem, dass die zurückgelieferten Werte nicht der 
Realität entsprechen. Der Wert innerhalb der Datei entspricht der 
Temperatur der RaspPi CPU in °C * 1000.

/sys/class/thermal/thermal_zone0/temp // Keine Dateiendung der Datei 
selber!

1
#include <stdio.h>
2
#include <stdlib.h>
3
4
FILE *pFile;
5
  
6
int main(void)
7
{
8
  pFile = fopen("/sys/class/thermal/thermal_zone0/temp", "r");
9
  if(pFile == NULL)
10
  {
11
    printf("Konnte Datei nicht oeffnen!\n");
12
    return EXIT_FAILURE;
13
  }
14
  else
15
  {
16
    long value;
17
    
18
    fread(&value, sizeof(value), 1, pFile);
19
    fclose(pFile);
20
    
21
    printf("%ld\n", value);
22
  }
23
  
24
  return EXIT_SUCCESS;
25
}

von Alexander F. (alexf91)


Lesenswert?

So wie ich das sehe liest du ein char Array (nämlich z.B. "38000") aus 
der Datei und speicherst den Inhalt in einer long Variable, du musst 
aber den String konvertieren (z.B. mit atol oder strtol).
1
    long value;
2
    char buffer[16];
3
4
    fgets(buffer, 16, pFile);
5
    value = atol(buffer);
6
    fclose(pFile);
7
    
8
    printf("%ld\n", value);

von RpiTwo (Gast)


Lesenswert?

Hallo Alexander,

danke für die Antwort. Hate in der Zwischenzeit selber einer Lösung 
geschrieben
1
int read_systeminfo(char *str)
2
  {
3
    FILE *pFile;
4
    char buffer[10];
5
6
    
7
    pFile = fopen(str, "r");
8
    
9
    if(pFile != NULL)
10
    {
11
      fread(&buffer, sizeof(buffer), 1, pFile);
12
      fclose(pFile);
13
      return atoi(buffer);
14
    }
15
    else return -1;
16
    
17
  }

Eine weitere Frage hätte ich noch. Leider lässt sich nur die CoreTemp 
direkt auslesen. Wie aber bekomme ich die Werte von vcgencmd eingelesen?

Mit python und den Beispielen kein Problem, aber wie wird sowas am 
besten in C gemacht?
https://www.saufler.de/article/raspberry-pi-system-info/
Am besten wenn gleich auch die unnötigen Werte nicht mit eingelesen 
werden.
/opt/vc/bin/vcgencmd measure_temp | tr -d "temp=" | tr -d "'C"

von Peter II (Gast)


Lesenswert?

RpiTwo schrieb:
> Am besten wenn gleich auch die unnötigen Werte nicht mit eingelesen
> werden.

einfach den quellcode von vcgencmd laden und die code bei dir verwenden.

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.