2010-04-02 60 views
13

Tôi đang tìm thư viện UUID để lập trình trong C, có xác suất hợp lý được cài đặt (hoặc ít nhất có thể cài đặt bởi trình quản lý gói) trên hầu hết các máy tính để bàn Linux hiện đại và hoạt động với pkg-config.Thư viện UUID cho C?

Hai khả năng sau dường như rõ ràng nhất:

Có ai có kinh nghiệm với hai những điều này và có thể đề nghị một trong khác, hoặc một possiblity thứ ba ?

Trả lời

18

Tôi đã sử dụng cả hai và tôi chắc chắn thích sử dụng util-linux-ng (trước đây là trong e2fsprogs). Đối với tính di động, tôi làm cho phần mềm của tôi hỗ trợ cả hai và sử dụng các macro autoconf/cmake để phát hiện được macro nào được cài đặt.

Vấn đề chính với OSSP đối với tôi là nó lạm dụng hướng đối tượng trong C không có lý do chính đáng. UUID chỉ là số 128 bit, có thể được biểu diễn bằng mảng char [16]. UUID thường được kết hợp với một cấu trúc khác (UUID đóng vai trò như một khóa hoặc một mã định danh cho cấu trúc đó), vì vậy nó sẽ là tốt nếu bạn có thể nội tuyến mảng đó trong chính cấu trúc đó.

Với UUID OSSP, nó cung cấp cho bạn một con trỏ uuid_t* đến đối tượng được phân bổ động, giữ trạng thái nhiều hơn chỉ giá trị UUID. Nếu bạn làm việc với hàng chục nghìn đối tượng, điều này làm cho chương trình trở nên chậm hơn, sử dụng nhiều bộ nhớ hơn và gây ra nhiều phân mảnh bộ nhớ hơn. Cuối cùng, để làm cho OSSP UUID có thể sử dụng được, bạn phải sử dụng nó để tạo UUID (bao gồm 4 cuộc gọi: uuid_create, uuid_make, uuid_export và uuid_destroy) và tự làm việc với giá trị UUID. Với util-linux-ng, nó chỉ là một cuộc gọi duy nhất: uuid_generate.

+0

+1, câu trả lời hay. –

+0

Juliano, bạn có muốn chia sẻ các chỉ thị cấu hình Autoconf cụ thể mà bạn đang sử dụng cho thiết lập này không? Tôi đang tìm nó từ đầu tại thời điểm này, nhưng là một người mới Autotools tôi cảm thấy tốt hơn dựa vào một cái gì đó đã được sử dụng thành công trong tự nhiên. Bất kỳ gợi ý nào được đánh giá cao ... –

+3

@Arto: http://pastebin.com/t04f5KmP – Juliano