Auslesen mit fopen() auf Raspberry Pi

Gast #4056575
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
}
#4056579
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);
Gast #4056597
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"

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.