2017-05-09 1 views
-2

Ich habe den folgenden Code:finden vendor_id proc/cpuinfo

#include <stdio.h> 
#include <string.h> 
char* get_cpu_vendor_id() 
{ 

FILE* fp; 
char buffer[1024]; 
size_t bytes_read; 
char* match; 
char* vendor_id; 

fp = fopen ("/proc/cpuinfo", "rb"); 

bytes_read = fread (buffer, 1, sizeof (buffer), fp); 

fclose (fp); 


if (bytes_read == 0 || bytes_read == sizeof (buffer)) 
    return 0; 

buffer[bytes_read] == '\0'; 

match = strstr (buffer, "vendor_id"); 
printf("%s", match); 

if (match == NULL) 
    return 0; 

sscanf (match, "vendor_id : %s", vendor_id); 
return vendor_id; 

} 

int main() 
{ 
printf ("Vendor ID Of The Processor: %s\n", get_cpu_vendor_id()); 

return 0; 
} 

es funktioniert gut, aber ich möchte nicht die ganze Reihe von Informationen so drucken, wenn ich die Anweisung printf("%s", match); Funktion entfernen get_cpu_vendor_id() jede beliebige zurück Wert ich bin nicht in der Lage, den Fehler

+0

@bigbounty was ist das Problem hier –

+0

Eine Möglichkeit Regex zu verwenden ist oder nach Ihrem Code, müssen Sie einige Speicher zuweisen für sscanf. – bigbounty

Antwort

1
sscanf (match, "vendor_id : %s", vendor_id); 

Sie haben noch Raum zu verstehen, die Zeichenfolge, Reserveraum zu speichern, bevor sscanf mit:

vendor_id = malloc(some_size); 

Und hier:

buffer[bytes_read] == '\0'; 

Sie den abschließenden Charakter mit 0 zu vergleichen, möchten Sie:

buffer[bytes_read] = '\0'; 

schließlich feststellen, dass "%s" stoppt Scannen an der ersten Leerstelle, in diesem Fall

vendor_id : GenuineIntel 

es nach : stoppt, verwenden "%[^\n]", um die ganze Zeile zu verbrauchen.

+0

ohh ja..es funktioniert –

0

vendor_id nicht zugeordnet ist jeder Speicher, Sie Speicher mit malloc zuweisen sollte es dann verwenden