c++ obtenir le numéro de série du disque dur ou de la partition

        Lorsque vous utilisez Windows, vous pouvez utiliser la commande pour obtenir les numéros de série (plus ou moins uniques) des partitions de disque dur.

GetVolumeInformation()

Exemple de code :

#include <iostream>

#include <windows.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    DWORD VolumeSerialNumber;
    char VolumeName[256];
    GetVolumeInformation("c:\\ ", VolumeName, 12, &VolumeSerialNumber, NULL, NULL, NULL, 10);
 
    printf("c盘的卷标:%s\n ", VolumeName);
    printf("c盘的序列号:%lu\n ", VolumeSerialNumber);

    return 0;
}

résultat:

c盘的卷标:Windows 
c盘的序列号:3831598124

        Existe-t-il quelque chose de similaire pour Linux ? Obtenir un encodage unique pour un périphérique matériel, et il peut être récupéré par programmation ?

solution:

        Sous Linux, vous pouvez utiliser la commande blkid pour obtenir l'UUID de la partition :

# sudo blkid /dev/sda1
/dev/sda1: UUID="007258df-98ea-47de-b906-35997ea63509" TYPE="ext4" PARTUUID="5c1bef5e-01"

        Ces informations sont stockées dans le format d'un type de partition spécifique (par exemple, ext4, xfs) et changent lors du reformatage.

        Invoquer un shell pour exécuter la commande n'est pas le meilleur moyen si vous devez l'appeler à partir du code, mais cela fonctionne :

// main.cpp
#include <stdio.h>

int main(int argc,char ** argv) 
{
  /* device you are looking for */   
  char device[]="/dev/sda1";

  /* buffer to hold info */
  char buffer[1024];

  /* format into a single command to be run */
  sprintf(buffer,"/sbin/blkid -o value %s",device);

  /* run the command via popen */
  FILE *f=popen(buffer,"r");

  /* probably should check to make sure f!=null */
  /* read the first line of output */
  fgets(buffer,sizeof(buffer),f);

  /* print the results (note, newline is included in string) */
  fprintf(stdout,"uuid is %s",buffer);
}

CMakeLists.txt

# 声明要求的 cmake 最低版本
cmake_minimum_required(VERSION 2.8)

# 声明一个 cmake 工程
project(blkid_sd)

# 设置编译模式
set(CMAKE_BUILD_TYPE "RELEASE")

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable(blkid_sd main.cpp)

Exécuter une commande :

mkdir build
cd build
cmake ..
make -j4
sudo ./blkid_sd
=> uuid is 007258df-98ea-47de-b906-35997ea63509

        Concernant c++ pour obtenir le numéro de série du disque dur/partition, il y a une question similaire sur Stack Overflow :  c++ - Get HD/Partition serial number - Stack Overflow .

おすすめ

転載: blog.csdn.net/weixin_34910922/article/details/131295089