Как получить идентификатор производителя процессора в приложении QT с помощью C - PullRequest
0 голосов
/ 25 мая 2019

Может ли кто-нибудь помочь мне прочитать идентификатор производителя процессора в приложении Qt, используя язык программирования C.

Вот код, который я пробовал:

#include <stdio.h>
int main()
{
    system("sudo dmidecode");
}

Я не могу использовать это, потому что:

  • Не работает в приложении QT
  • Я хочу сохранить эту информацию в файле в приложении qt.

Может кто-нибудь предложить мне другой способ хранения информации о процессоре в побочном файле с помощью приложения Qt?

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

Если вы хотите сохранить это в файл, это очень просто.

Вам нужно проанализировать вывод /proc/cpuinfo так, как вы хотите, и перенаправить вывод в файл. Вы можете сделать это с помощью простых инструментов командной строки, таких как grep и cut (и многих других).

Тогда вы получите такую ​​строку.

system("cat /proc/cpuinfo | grep something > output_file");

Есть и другие причудливые способы сделать это, например, libcpuid , на которые вы, возможно, захотите посмотреть.

0 голосов
/ 25 мая 2019

прочитайте файл / proc / cpuinfo и посмотрите на строку (и), содержащую "имя модели" (по крайней мере, для Debian / CentOS / OpenSuse, проверьте ваш Linux)

Пример моего raspberrypi:

pi@raspberrypi:/tmp $ cat /proc/cpuinfo 
processor   : 0
model name  : ARMv7 Processor rev 4 (v7l)
BogoMIPS    : 38.40
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor   : 1
model name  : ARMv7 Processor rev 4 (v7l)
BogoMIPS    : 38.40
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor   : 2
model name  : ARMv7 Processor rev 4 (v7l)
BogoMIPS    : 38.40
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor   : 3
model name  : ARMv7 Processor rev 4 (v7l)
BogoMIPS    : 38.40
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xd03
CPU revision    : 4

Hardware    : BCM2835
Revision    : a020d3
Serial      : 000000003a871273

Пример под CentOS:

[bruno@localhost ~]$ cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 42
model name  : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
stepping    : 7
cpu MHz     : 3409.658
cache size  : 8192 KB
physical id : 0
siblings    : 8
core id     : 0
cpu cores   : 8
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm
bogomips    : 6819.31
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 42
model name  : Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
...

Например:

#include <stdio.h>
#include <string.h>

int main()
{
  FILE * fp = fopen("/proc/cpuinfo", "r");

  if (fp == 0)
    fprintf(stderr, "cannot open /proc/cpuinfo !");
  else {
    char line[256];

    while (fgets(line, sizeof(line), fp) != NULL) {
      if (strncmp(line, "model name", 10) == 0) {
        char * model = strchr(line, ':');

        if (model != NULL) {
          model += (model[1] == ' ') ? 2 : 1;
          fputs(model, stdout);
        }

        break;
      }
    }
    fclose(fp);
  }

  return 0;
}

Компиляция и исполнение:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra -Wall c.c
pi@raspberrypi:/tmp $ ./a.out
ARMv7 Processor rev 4 (v7l)

Или, если вы ленивы и не хотите разбирать самостоятельно:

#include <stdio.h>

int main()
{
  FILE * fp = popen("grep model /proc/cpuinfo | head | awk -F: '{print $2}'", "r");

  if (fp != NULL) {
    char line[256];

    if (fgets(line, sizeof(line), fp)) {
      char * model = (*line == ' ') ? line + 1 : line;

      fputs(model, stdout);
    }

    pclose(fp);
  }

  return 0;
}

Обратите внимание, что в обоих случаях модель содержит новую строку, эти решения совместимы с любым процессором.

...