使用proc / cpuinfo查找vendor_id

时间:2017-05-09 05:36:26

标签: c linux

我有以下代码:

#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; 
} 

它工作正常,但我不想打印大量信息,所以当我删除语句printf("%s", match);函数get_cpu_vendor_id()时,返回任意值,我无法理解

2 个答案:

答案 0 :(得分:1)

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

在使用sscanf

之前,您没有空间存储字符串,预留空间
vendor_id = malloc(some_size);

在这里:

buffer[bytes_read] == '\0';

您要将尾随字符与0进行比较,您需要:

buffer[bytes_read] = '\0';

最后,请注意"%s"停止扫描第一个空白字符,在本例中为

vendor_id   : GenuineIntel

:之后停止,使用"%[^\n]"消耗整行。

答案 1 :(得分:0)

vendor_id没有分配任何内存,你应该使用malloc分配内存然后使用它