2010-07-24 11 views

Trả lời

4

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_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ị.

+0

Bạn có thể nhận xét về việc chúng có sẵn trong Python hay không và ở đâu? –

+0

@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

+2

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. –

0

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ó.