2012-02-24 28 views
5

Tôi tiếp tục chạy trên các quy ước nhỏ như __KERNEL__.Ý nghĩa của dấu gạch dưới đầu và cuối trong mã định danh hạt nhân Linux là gì?

Có phải __ trong trường hợp này là quy ước đặt tên được các nhà phát triển hạt nhân sử dụng hay là lý do cú pháp cụ thể để đặt tên macro theo cách này?

Có nhiều ví dụ về điều này trong suốt mã.

Ví dụ: một số hàm và biến bắt đầu bằng _ hoặc thậm chí __.

Có lý do cụ thể nào cho điều này không?

Dường như nó được sử dụng khá rộng rãi và tôi chỉ cần làm rõ một số việc liệu những thứ này có mục đích cú pháp hay đơn giản là quy ước đặt tên.

Ngoài ra, tôi thấy nhiều loại người dùng đã khai báo như uid_t. Một lần nữa tôi giả định đây là một quy ước đặt tên nói với người đọc rằng đó là một loại người dùng định nghĩa?

+2

'_t' cho bạn biết đây là loại được tạo bởi' typedef'. – Linuxios

+0

Chúc mừng cho phản ứng. Xin lỗi, để làm sáng tỏ sự mơ hồ, khi tôi nói các loại do người dùng xác định, tôi thực sự có nghĩa là những loại được định nghĩa bởi typedef. –

+1

Chắc chắn. Đối với dấu gạch dưới, tôi đoán là để ngăn chặn một macro được sử dụng mà nó không được dự định khi nó có một tên mơ hồ với một hàm hoặc lớp. – Linuxios

Trả lời

4

Có một số trường hợp:

  • Trong tiêu đề phải đối mặt với công chúng, nghĩa là bất cứ điều gì mà libc sẽ được tiếp quản và đưa dưới /usr/include/linux, các tiêu chuẩn xác định các ký tự cần được xác định và bất kỳ biểu tượng khác đặc trưng cho hệ thống có trách nhiệm bắt đầu bằng dấu gạch dưới và chữ hoa hoặc hai dấu gạch dưới. Đó là lý do cho __KERNEL__ đặc biệt, bởi vì nó được sử dụng trong các tiêu đề được bao gồm cả trong hạt nhân và trong libc và một số khai báo là khác nhau.
  • Trong mã nội bộ, quy ước thường là biểu tượng __something là workhorse cho something ngoại trừ một số quản lý, thường khóa. Đó là lý do cho những thứ như __d_lookup. Quy ước tương tự cho các cuộc gọi hệ thống là sys_something là điểm nhập cuộc gọi hệ thống xử lý chuyển ngữ cảnh đến và từ hạt nhân và gọi do_something để thực hiện công việc thực tế.
  • Hậu tố _t là quy ước thư viện chuẩn cho typedef. Ví dụ. size_t, ptrdiff_t, foff_t và tương tự. Mã hạt nhân tuân theo quy ước này cho các kiểu nội bộ của nó.
+0

Cảm ơn câu trả lời của bạn. Với tất cả các tài liệu kiểu mã hóa về hạt nhân, tôi ngạc nhiên rằng tôi không tìm thấy nhiều tài liệu về các quy ước đặt tên trong hạt nhân. Bạn chỉ cần nhặt những thứ này bằng cách làm hạt nhân hack? – KarateSnowMachine

+0

@KarateSnowMachine: Vâng, điểm đầu tiên và cuối cùng đến từ tiêu chuẩn C. Điểm giữa, chủ yếu là có. Tôi đã không làm bất kỳ sự tấn công hạt nhân nghiêm trọng nào, nhưng tôi đã có một bài tập về hạt nhân ở trường, vì vậy tôi phải đọc khá nhiều mã (đặc biệt là để kiểm tra lại khóa). –

Các vấn đề liên quan