The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Функция возвращающая уникальное значение."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Функция возвращающая уникальное значение." 
Сообщение от harlan emailИскать по авторуВ закладки(ok) on 11-Апр-05, 11:19  (MSK)
Народ, нужна функция, которая при каждом вызове возвращала уникальное значение (тип не важен), которое гарантировано никогда не повторяющется. Существует ли такая функция в природе, если нет, то подскажите, пожалуйста, алгоритм, как можно получать такие значения?
Инкремент не подходит. Если уничтожить текущее значение, то инкременция пойдёт опять с 0, а это не правильно. Привязать к часам, то же не хорошо.
Нужна какая-то комбинация этих методов.
  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Функция возвращающая уникальное значение." 
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 11-Апр-05, 11:31  (MSK)
>Народ, нужна функция, которая при каждом вызове возвращала уникальное значение (тип не
>важен), которое гарантировано никогда не повторяющется. Существует ли такая функция в
>природе, если нет, то подскажите, пожалуйста, алгоритм, как можно получать такие
>значения?
>Инкремент не подходит. Если уничтожить текущее значение, то инкременция пойдёт опять с
>0, а это не правильно. Привязать к часам, то же не
>хорошо.
>Нужна какая-то комбинация этих методов.

Почему не подходит? Как инкремент может опять пойти с нуля?

int func()
{
  static int value = 0;
  return value++;
}

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Функция возвращающая уникальное значение." 
Сообщение от harlan emailИскать по авторуВ закладки(ok) on 11-Апр-05, 11:53  (MSK)
>
>int func()
>{
>  static int value = 0;
>  return value++;
>}
А, допустим, программа запускается снова. Нужно инициировать переменную value значением, на котором остановился счётчик при предыдущем вызове программы. Для этого можно, скажем, сохранять значение в файл, а при старте программы этот файл прочитывать. Но если возниает нештатная ситуация (например, файл был уничтожен) то значению value опять присваивается 0, со всеми вытекающими... В WinAPI есть функция генерации такого значения, а есть ли что-нить подобное под *NIX?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Функция возвращающая уникальное значение." 
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 11-Апр-05, 11:56  (MSK)
>>
>>int func()
>>{
>>  static int value = 0;
>>  return value++;
>>}
>А, допустим, программа запускается снова. Нужно инициировать переменную value значением, на котором
>остановился счётчик при предыдущем вызове программы. Для этого можно, скажем, сохранять
>значение в файл, а при старте программы этот файл прочитывать. Но
>если возниает нештатная ситуация (например, файл был уничтожен) то значению value
>опять присваивается 0, со всеми вытекающими... В WinAPI есть функция генерации
>такого значения, а есть ли что-нить подобное под *NIX?

Ну можешь к этому значению ещё прибавлять gettimeofday, данные из /dev/urandom (псевдослучайные -)) И т.п., вариантов много.
А на счет того, что файл будет уничтожен - надо корректно обрабатывать такие вещи. Или делать отказоустойчивое ПО, резерв. копирование, и т.п.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Функция возвращающая уникальное значение." 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 11-Апр-05, 13:20  (MSK)
Можно GUID генерировать. *Гарантировать* уникальность здесь нельзя,
однако вероятность коллизий очень мала. Библиотек для генерации оных
GUID'ов как минимум не одна :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Функция возвращающая уникальное значение." 
Сообщение от harlan Искать по авторуВ закладки(ok) on 13-Апр-05, 10:21  (MSK)
>Можно GUID генерировать. *Гарантировать* уникальность здесь нельзя,
>однако вероятность коллизий очень мала. Библиотек для генерации оных
>GUID'ов как минимум не одна :)

А хотябы одну библиотеку подсказать можешь?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Функция возвращающая уникальное значение." 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 13-Апр-05, 10:30  (MSK)
>А хотябы одну библиотеку подсказать можешь?

libuuid (см. http://e2fsprogs.sourceforge.net)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Функция возвращающая уникальное значение." 
Сообщение от ovax Искать по авторуВ закладки(??) on 13-Апр-05, 11:35  (MSK)
а почему собственно юникс-тайм не подходит ?
он вернёт вам количество секунд с начала 1970 года. вполне уникальное значение ...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Функция возвращающая уникальное значение." 
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 13-Апр-05, 11:39  (MSK)
>а почему собственно юникс-тайм не подходит ?
>он вернёт вам количество секунд с начала 1970 года. вполне уникальное значение
>...

На время нельзя расчитывать, его перевести можно -))

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Функция возвращающая уникальное значение." 
Сообщение от Vladislav Lazarenko emailИскать по авторуВ закладки on 13-Апр-05, 11:34  (MSK)
>>Можно GUID генерировать. *Гарантировать* уникальность здесь нельзя,
>>однако вероятность коллизий очень мала. Библиотек для генерации оных
>>GUID'ов как минимум не одна :)
>
>А хотябы одну библиотеку подсказать можешь?

glibc

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру