Как я могу генерировать системные уникальные идентификаторы под 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-битной строке.