Генерация случайных UUID в Linux

Я застреваю в странном затруднительном положении. Я должен генерировать UUID в своей программе Linux (который я распределяю использование RPMs). Я не хочу добавлять, другая зависимость к моему приложению, требуя, чтобы пользователь установил libuuid (кажется, что libuuid не включен в большинство дистрибутивов Linux, как CentOS).

Нет ли стандартный системный вызов Linux, который генерирует UUID (как, говорят, в Windows там CoCreateGuid)? Что делает команду uuidgen использование?

11
задан user2864740 20 June 2014 в 06:45
поделиться

4 ответа

Спасибо за все ваши комментарии!

Я просмотрел каждый из них, и вот что лучше всего соответствовало моим требованиям:

Мне нужны были только простые UUID-ы, основанные на времени, которые генерировались из случайных чисел один раз для каждого пользователя, который устанавливал приложение. UUID версии 4, как указано в RFC 4122, был именно таким. Я просмотрел предложенный алгоритм и придумал довольно простое решение, которое бы работало как в Linux, так и в Windows (может быть, слишком упрощенное, но оно и вправду удовлетворяет эту потребность!):

srand(time(NULL));

sprintf(strUuid, "%x%x-%x-%x-%x-%x%x%x", 
    rand(), rand(),                 // Generates a 64-bit Hex number
    rand(),                         // Generates a 32-bit Hex number
    ((rand() & 0x0fff) | 0x4000),   // Generates a 32-bit Hex number of the form 4xxx (4 indicates the UUID version)
    rand() % 0x3fff + 0x8000,       // Generates a 32-bit Hex number in the range [0x8000, 0xbfff]
    rand(), rand(), rand());        // Generates a 96-bit Hex number
8
ответ дан 3 December 2019 в 01:44
поделиться

Есть ли причина, по которой ты не можешь просто статически связать себя с либуидом?

3
ответ дан 3 December 2019 в 01:44
поделиться

Возможно, оойд поможет? http://ooid.sourceforge.net/

2
ответ дан 3 December 2019 в 01:44
поделиться

Посмотрите на форму с левой стороны по этому URL-адресу http://www.blueprintcss.org/tests/parts/forms.html

Если вы размещаете метку на 1 строке, а поле ввода - на другой строке, то вам не нужно беспокоиться о выравнивании меток. Стиль это немного больше вы будете иметь чистый и хороший web2.0, как форма

enter image description here

Ура

-121--3006973-

Самое простое решение, которое я могу придумать:

ending = str[-n..-1] || str

(EDIT: оператор или имеет более низкий приоритет, чем назначение, поэтому обязательно используйте | | вместо него.)

-121--740276-

В POSIX не существует системного вызова для генерации UUID, но я полагаю, что можно найти код BSD/MIT для генерации UUID. ooid выпускается под лицензией на программное обеспечение Boost, которая согласно википедии, является разрешительной лицензией в стиле BSD/MIT. Затем его можно просто вставить в приложение, не добавляя зависимостей.

2
ответ дан 3 December 2019 в 01:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: