C プログラムからシステム UUID を取得しようとしています。次のことを試しました:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SYS_UUID_PATH "/sys/class/dmi/id/product_uuid"
#define DBUS_MACHINE_ID "/var/lib/dbus/machine-id"
int main(int argc, char ** argv)
{
char buffer[100];
//FILE * fd = popen(DBUS_MACHINE_ID, "r");
FILE * fd = popen(SYS_UUID_PATH, "r");
if (fd== NULL)
{
printf("No file to open my guy \n");
return -1;
}
int len = fseek(fd, 0, SEEK_END);
printf("size: %d", len);
return 0;
}
: そして、root として、または sudo を持つユーザーとして実行すると、次の出力が得られました。
size: -1root@nabil-Inspiron:/tmp# sh: 1: /sys/class/dmi/id/product_uuid: Permission denied
正しいやり方は何ですか?
答え1
/sys/class/dmi/id/product_uuid
コマンドとして実行しようとしていますが、読み取る必要があるのはファイルです。
の代わりに
FILE * fd = popen(SYS_UUID_PATH, "r");
使用する必要がある
FILE * fd = fopen(SYS_UUID_PATH, "r");