Tôi hiểu rằng -D_FILE_OFFSET_BITS=64
gây ra off_t
là 64 bit. Vì vậy, những gì hiện -D_LARGEFILE_SOURCE
làm điều đó chưa được thực hiện bởi -D_FILE_OFFSET_BITS=64
? Những định nghĩa này làm gì chính xác?Sự khác nhau giữa _LARGEFILE_SOURCE và _FILE_OFFSET_BITS = 64 là gì?
Trả lời
Các glibc Feature test macros bang tài liệu:
_LARGEFILE_SOURCE
Nếu macro này được xác định một số chức năng bổ sung có sẵn trong đó khắc phục một vài thiếu sót trong tất cả các tiêu chuẩn trước đó. Cụ thể, các chức năng fseeko và ftello có sẵn. Không có các hàm này, sự khác nhau giữa giao diện ISO C (fseek, ftell) và giao diện POSIX ở mức thấp (lseek) sẽ dẫn đến các vấn đề.Macro này được giới thiệu như là một phần của phần mở rộng Hỗ trợ tệp lớn (LFS).
Vì vậy, macro đó đặc biệt làm cho fseeko
và ftello
khả dụng. Chỉ có các cài đặt _FILE_OFFSET_BITS
không làm cho các chức năng này khả dụng.
(Lưu ý rằng nếu bạn đang sử dụng một phương ngữ GNU C, mặc định với GCC, bạn có thể không cần phải xác định một cách rõ ràng _LARGEFILE_SOURCE
. Bạn làm gì nếu bạn sử dụng -std=c99
ví dụ.)
Câu trả lời khác là sai, vì tài liệu cho _LARGEFILE_SOURCE
gây hiểu lầm. _FILE_OFFSET_BITS=64
đủ để hiển thị các chức năng fseeko
và ftello
và do đó là macro _POSIX_C_SOURCE
được xác định là> = 200112L
.
Từ các tài liệu glibc trên _FILE_OFFSET_BITS
Nếu macro được định nghĩa với giá trị 64, giao diện tập tin lớn thay thế giao diện cũ. Tức là, các chức năng không được cung cấp dưới các tên gọi khác nhau (vì chúng có tên là
_LARGEFILE64_SOURCE
). Thay vào đó, tên hàm cũ giờ đây tham chiếu đến các hàm mới, ví dụ: cuộc gọi tớifseeko
hiện thực sự gọi làfseeko64
.
Luôn xác định _FILE_OFFSET_BITS=64
để chuyển sang loại 64 bit trên hệ thống dựa trên glibc 32 bit. glibc thực sự nên biến nó thành mặc định ...
- 1. Sự khác nhau giữa bộ xử lý 32 bit và 64 bit là gì?
- 2. Sự khác nhau giữa KERN_INVALID_ADDRESS và KERN_PROTECTION_FAILURE là gì?
- 3. Sự khác nhau giữa WPF và WinForms là gì?
- 4. Sự khác nhau giữa JavaScript và Java là gì?
- 5. Sự khác nhau giữa ODBC và OleDB là gì?
- 6. Sự khác nhau giữa SGML và XML là gì?
- 7. Sự khác nhau giữa DefaultSelenium và RemoteWebDriver là gì?
- 8. Sự khác nhau giữa RMI và Corba là gì?
- 9. Sự khác nhau giữa scgi và wsgi là gì?
- 10. Sự khác nhau giữa wsHttpBinding và ws2007HttpBinding là gì?
- 11. Sự khác nhau giữa Pingback và Trackback là gì?
- 12. Trong Python, sự khác nhau giữa ".append()" và "+ = []" là gì?
- 13. Sự khác nhau giữa AxInterop và Interop là gì?
- 14. Sự khác nhau giữa CellClick và CellMouseClick là gì?
- 15. Sự khác nhau giữa .bashrc, .bash_profile và .environment là gì?
- 16. Sự khác nhau giữa JSP và Facelets là gì?
- 17. Sự khác nhau giữa hg quên và hg là gì?
- 18. Sự khác nhau giữa GDI và GDI + là gì?
- 19. Sự khác nhau giữa đá quý và plugin là gì?
- 20. Sự khác nhau giữa metaClass.methods và metaClass.metaMethods là gì?
- 21. Sự khác nhau giữa kEND và $ end là gì?
- 22. Sự khác nhau giữa java và jsp là gì?
- 23. Sự khác nhau giữa Application.Run() và Form.ShowDialog() là gì?
- 24. Sự khác nhau giữa -0 và 0 là gì?
- 25. Sự khác nhau giữa HTTP 1.0 và 1.1 là gì?
- 26. Sự khác nhau giữa java.lang.Math và java.lang.StrictMath là gì?
- 27. Sự khác nhau giữa " " và "" là gì?
- 28. Sự khác nhau giữa Spring BeanFactoryAware và ApplicationContextAware là gì?
- 29. sự khác nhau giữa SCRIPT_FILENAME và SCRIPT_NAME là gì?
- 30. Sự khác nhau giữa JSP và JSTL là gì?