Như một quy tắc chung, bạn nên luôn sử dụng phiên bản thư viện C. Chúng thường có các trình bao bọc xử lý những điều bí truyền như khởi động lại trên một tín hiệu (nếu bạn đã yêu cầu). Điều này đặc biệt đúng nếu bạn đã liên kết với thư viện. Tất cả các quy tắc có lý do để bị phá vỡ. Lý do sử dụng các cuộc gọi trực tiếp,
- Bạn muốn
libc
không thuyết phục; Có thể với một trình cài đặt. Mã như vậy có thể chạy trên Android (bionic), uClibc và các hệ thống glibc/eglibc truyền thống khác, bất kể thư viện được sử dụng. Ngoài ra, tải động với trình bao bọc để tạo lớp glibc/bionic thời gian chạy cho phép nhị phân Android/Linux kép.
- Bạn cần hiệu suất cực đoan. Mặc dù điều này có lẽ hiếm và rất có thể là sai lầm.Có thể suy nghĩ lại vấn đề sẽ mang lại lợi ích hiệu suất tốt hơn và không phải gọi hệ thống thường là một chiến thắng hiệu suất, mà đôi khi có thể làm
libc
.
- Bạn đang viết một số mã
initramfs
hoặc init
không có thư viện; để tạo hình ảnh nhỏ hơn hoặc khởi động nhanh hơn.
- Bạn đang thử nghiệm hạt nhân/nền tảng mới và không muốn làm phức tạp cuộc sống với hệ thống tệp toàn diện; rất giống với
initramfs
.
- Bạn muốn làm điều gì đó rất nhanh chóng khi khởi động chương trình, nhưng cuối cùng muốn sử dụng các thói quen
libc
.
- Để tránh lỗi đã biết trong số
libc
.
- Chức năng không khả dụng qua
libc
.
Xin lỗi, hầu hết các ví dụ đều là Linux cụ thể, nhưng các lý do nên áp dụng cho các biến thể Unix khác. Mục cuối cùng là khá phổ biến khi các tính năng mới được đưa vào hạt nhân. Ví dụ: khi kqueue
hoặc epoll
nơi được giới thiệu lần đầu tiên, không có libc
để hỗ trợ chúng. Điều này cũng có thể xảy ra nếu hệ thống có một thư viện cũ hơn, nhưng một hạt nhân mới hơn và bạn muốn sử dụng chức năng này.
Nếu quy trình của bạn chưa sử dụng số libc
thì rất có thể một số thứ trong hệ thống sẽ có. Bằng cách mã hóa các biến thể của riêng bạn, bạn có thể phủ nhận bộ nhớ cache bằng cách cung cấp hai đường dẫn đến cùng một mục tiêu kết thúc. Ngoài ra, Unix sẽ chia sẻ các trang mã giữa các quy trình. Nói chung không có lý do gì để không sử dụng phiên bản libc
.
Các câu trả lời khác đã thực hiện một công việc xuất sắc về sự khác biệt giữa libc
và cuộc gọi hệ thống.
Nguồn
2013-03-24 04:45:43
pic tuyệt vời. rất rõ ràng – henryyao