2012-04-18 1 views
-2
#include <stdio.h> 
#include <stdlib.h> 
#include <uuid/uuid.h> 

int main(void) { 
    puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */ 
    uuid_t uuid; 
    int uuid_generate_time_safe(uuid); 
    printf("%x",uuid); 
    return EXIT_SUCCESS; 
} 

왜 나는 uuid가 16 바이트가 아닌지 궁금합니다. DEBUG을 사용하여 메모리를 봅니다. 실제로 16 바이트가 아닙니다. 그리고 libpcap을 사용하여 프로그램을 개발합니다. uuid는 고유하지 않습니다.리눅스 C - UUID에 대해서

+1

어떻게 16 바이트 길이가 아니라고 결정합니까? 'sizeof (uuid)'를 검사하면 어떻게됩니까? 왜 ['uuid_parse()'] (http://linux.die.net/man/3/uuid_parse)를 사용하지 않습니까? –

+3

16 바이트 길이가 아닌 것을 알려 드리겠습니다. '% x'에 해당하는 인수. – asveikau

+0

@OliCharlesworth uuid_t = char [16], uuid 헤더 파일에 정의되어 있습니다. – user1111073

답변

11

방금 ​​시스템에서 프로그램을 시도한 결과 uuid 16 바이트입니다. 그러나 프로그램 크기가 표시되지 않습니다.

라인 :

int uuid_generate_time_safe(uuid); 

uuid_generate_time_safe 함수를 호출하지, 그것은 하나의 매개 변수 (무시) ​​이름으로 uuid와 그 함수의 선언입니다. (그리고 함수 선언의 종류는 기존의 "암시 int"규칙을 떨어 1999 년 기준, 현재도 유효하지 않습니다.)

귀하의 printf 전화 :

printf("%x",uuid); 

보증되지 행동; "%x"에는 unsigned int 유형의 인수가 필요합니다.

typedef unsigned char uuid_t[16]; 

uuid_generate_time_safe의 올바른 선언 (man uuid_generate_time_safe 참조) 일 :

int uuid_generate_time_safe(uuid_t out); 

당신은하지 않습니다 당신이 /usr/include/uuid/uuid.h를 보면

, 당신은 uuid_t의 정의는 것을 볼 수 있습니다 자신의 코드에서 그 선언이 필요합니다. 그것은 #include <uuid/uuid.h>에 의해 제공됩니다. uuid_t은 배열 유형이므로 매개 변수는 실제로 유형이 unsigned char*입니다. 따라서 함수가 외관상 매개 변수를 수정할 수 있습니다. 여기

이 기능의 사용을 설명하는 더 정확한 프로그램입니다 : 내 시스템에서

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

int main(void) { 
    uuid_t uuid; 
    int result = uuid_generate_time_safe(uuid); 
    printf("sizeof uuid = %d\n", (int)sizeof uuid); 
    // or: printf("sizeof uuid = %zu\n", sizeof uuid); 
    if (result == 0) { 
     puts("uuid generated safely"); 
    } 
    else { 
     puts("uuid not generated safely"); 
    } 
    for (size_t i = 0; i < sizeof uuid; i ++) { 
     printf("%02x ", uuid[i]); 
    } 
    putchar('\n'); 
    return 0; 
} 

을, 나는 다음과 같은 출력을 가지고 :

sizeof uuid = 16 
uuid not generated safely 
26 9b fc b8 89 35 11 e1 96 30 00 13 20 db 0a c4 

가에 대한 자세한 내용은 매뉴얼 페이지를 참조하십시오를 왜 "uuid not generated 안전하게"메시지가 나타날 수 있습니다.

이 프로그램을 빌드하고 실행할 수 있으려면 uuid-dev 패키지를 설치해야합니다.

+0

감사합니다. 내가 참조. 귀하의 프로그램은 훌륭합니다. – user1111073