Как я могу генерировать системные уникальные идентификаторы под Linux

Я работаю над многопроцессорной системой Linux и должен генерировать уникальные идентификаторы. Безопасность не является соображением, поэтому генератор ID, который начинается с нуля и подсчитывает, будет в порядке. Кроме того, это только в локальной машине, без участия сети. Очевидно, это не сложно реализовать, но мне просто интересно, есть ли что-то уже предоставленное (желательно легкое).

4 ответов


Это звучит как задание для... ...uuidgen:

% uuidgen 
975DA04B-9A5A-4816-8780-C051E37D1414

если вы хотите встроить его в свое собственное приложение или службу, вам понадобится libuuid:

#include <uuid/uuid.h>
#include <iostream>

int main()
{
    uuid_t uu;
    uuid_generate(uu);
    char uuid[37];
    uuid_unparse(uu, uuid);
    std::cout << uuid << std::endl;
}

есть инструмент командной строки UUID, который будет делать именно то, что вы хотите. Я не уверен, что он устанавливается по умолчанию в различных дистрибутивах, поэтому вам, возможно, придется сделать это самостоятельно.


в случаях, когда uuidgen не установлен, вы можете использовать mktemp. Например, для 16 символов (должно быть достаточно для достижения системных уникальных идентификаторов) ...

mktemp-u XXXXXXXXXXXXXXXXXX


также полезно..

 cat /etc/machine-id

файл /etc/machine-id содержит уникальный идентификатор машины локальной системы, заданный во время установки. Идентификатор машины-это строка идентификатора машины с одной новой строкой, шестнадцатеричной, 32-символьной и строчной строкой. При декодировании из шестнадцатеричного это соответствует 16-байтовой/128-битной строке.