2014-12-02 4 views
0

텍스트 파일에 저장된 데이터 구조 유형을 읽을 수있는 C 래퍼를 만듭니다. 인터페이스 고유 데이터 구조에 매핑 된 고유 ID를 생성하고 고유 ID를 통해 래퍼 함수를 ​​통해 수정할 수 있어야합니다.C 고유 ID 생성

문제는지도에 고유 한 ID를 생성 할 수 있어야한다는 것입니다. 외부 라이브러리를 사용하고 싶지 않습니다. 큰 오버 헤드없이이 작업을 수행 할 수있는 방법이 있습니까?

+6

약 1, 2, 3, 4, ...? –

+1

외부 라이브러리를 사용하려는 이유는 무엇입니까? 어떤 운영 체제에서 코딩하고 있습니까? 'id '가 얼마나 독창적이어야 하는가? (전 세계적으로 유일한가, 시스템 전체적으로 고유한지, 아니면 프로세스 전체에서 유일한가)? 그것을 향상시키기 위해 ** 귀하의 질문을 ** 수정하십시오! –

+0

Windows. 필자는 외부 라이브러리를 사용하지 않기로 선택했기 때문에 라이브러리가 "부피가 커집니다". 작고 단순하며 호환되는 것들을 유지하고 싶습니다. – user82779

답변

0

ID가 실제로는 전 세계적으로 고유하기를 바랄 것입니다. 두 개의 서로 다른 컴퓨터에서 서로 다른 두 컴퓨터에서 프로그램을 실행하는 두 프로세스가 항상 다른 ID를가집니다.

그렇지 않다면 static long counter; 다음으로 id = counter++;을 래퍼에 사용하십시오.

이러한 목적으로 UUID을 사용할 수 있습니다.

또는 임의의 예를 생성 할 수 있습니다. 24 바이트 - 문자열 (또는 두 개 또는 세 개의 랜덤 uint64_t 숫자). 당신의 숫자가 "충분히"무작위 인 경우 (적어도 PRNG에 시작 시간에 무작위로 씨앗을 뿌린 경우, 예를 들면 무작위 소스가 random(4)이거나 현재 시간이 & 프로세스 ID가 & 인 호스트 ID를 사용하는 경우에는 PRNG 큰 상태 일 때) collisions 확률은 무시할 수 있어야합니다 (그러나 나는 그것을 정량화 할 능력이 없거나 기꺼이하지 않습니다).

FWIW, 내 MELT 모니터에서 나는 일상적으로 비슷한 일을하고있다. (리눅스에서) 내 파일 random.c; mom_make_random_idstr; 무작위 문자열은 멋지게 제한된 문자 세트 (C 식별자와 호환 가능)를 포함합니다.

MongoDb objids에서 영감을 얻을 수도 있습니다.

도 참조하십시오. this related question.