Trong limits.h
và ở nhiều nơi trong trang man POSIX, có các tham chiếu đến PATH_MAX
và NAME_MAX
. Các liên kết này liên quan với nhau như thế nào? Tài liệu chính thức cho họ ở đâu? Làm cách nào để có được thời gian chạy và thời gian biên dịch cho các môi trường C, Python và GNU?Mối quan hệ giữa PATH_MAX và NAME_MAX là gì và làm thế nào để tôi có được?
Trả lời
PATH_MAX
là độ dài tối đa của đường dẫn hệ thống tệp. NAME_MAX
là độ dài tối đa của tên tệp (ở một vị trí cụ thể). Vì vậy, /foo/bar
bị hạn chế bởi PATH_MAX
và chỉ phần bar
có độ dài được giới hạn bởi NAME_MAX
.
Bạn có thể nhận các mã này tại thời gian chạy qua pathconf
, như _PC_PATH_MAX
và _PC_NAME_MAX
, mặc dù thực hành tiêu chuẩn thường chỉ sử dụng các macro tĩnh tại thời gian biên dịch. Tôi cho rằng sẽ tốt hơn nếu sử dụng tùy chọn thời gian chạy vì bạn có khả năng hỗ trợ giá trị dài hơn theo cách đó, nhưng tôi không chắc chắn hệ thống (nếu có) thực sự cung cấp lợi nhuận từ pathconf
lớn hơn giá trị của POSIX_FOO_MAX
giá trị.
Trên hầu hết các hệ điều hành, không nên định nghĩa bất kỳ điều nào. Nó chỉ được định nghĩa ở tất cả, nếu hệ điều hành có độ dài tối đa cho một chuỗi mô tả một đường dẫn, mà hầu hết hệ điều hành không có; trong những trường hợp đó, bạn sẽ gặp lỗi nếu bạn sử dụng PATH_MAX
bên ngoài macro.
Bạn nên tránh dựa vào sự tồn tại của PATH_MAX
và cố gắng bỏ qua nó toàn bộ.
Điều đó hoàn toàn tồn tại, trên hầu hết các hệ điều hành, thực sự là lỗi. Theo như tôi biết, chỉ có hệ điều hành Windows thực sự tôn vinh nó.
Bạn có thể nhận xét về việc chúng có sẵn trong Python hay không và ở đâu? –
@Matt Joiner: Câu hỏi của bạn chỉ thực sự có ý nghĩa đối với C; không có "thời gian biên dịch" cho Python hoặc shell scripting. Nếu bạn đang sử dụng một ngôn ngữ kịch bản, các biến này cũng không có ích cho bạn - chỉ cần sử dụng một chuỗi dài không xác định để thao tác các đường dẫn của bạn. Ngoài ra, đây là các biến hệ thống cụ thể và một tập lệnh Python lý tưởng nên di động, vì vậy bạn có thể không muốn sử dụng chúng và thay vào đó chỉ kiểm tra lỗi "đường dẫn quá dài" khi tạo/truy cập tệp. – Borealid
Tôi đang viết một hệ thống tập tin bằng Python, vì vậy chúng thực sự rất quan tâm. Tôi đang gọi 'os.fpathconf' trên tệp thiết bị của tôi như là một dự đoán tốt nhất cho 'PATH_MAX' và' NAME_MAX' là thuộc tính của việc triển khai của tôi được trả về thông qua 'struct statvfs'. Mặc dù thiếu các mẹo Python, đây là một câu trả lời hay. –