Kiểm tra xem một đường dẫn vượt quá tối đa cho ổ cắm tên miền Unix


9

Các hệ điều hành giới hạn độ dài đường dẫn của ổ cắm tên miền Unix. Làm cách nào để kiểm tra xem một đường dẫn cụ thể có nằm trong giới hạn đó không?

Hoặc, nói cách khác, làm cách nào tôi có thể kiểm tra độ dài tối đa được phép của đường dẫn của ổ cắm tên miền Unix, trên hệ thống Linux hoặc Mac OS X?

Trường hợp sử dụng của tôi ở đây là cho ghép kênh SSH: nếu ControlPath quá dài, thì ghép kênh SSH sẽ không hoạt động vì nó tạo ra một ổ cắm miền unix. Tôi muốn có thể kiểm tra đường dẫn điều khiển hợp lệ mà không cần phải thực sự bắt đầu phiên ssh và tìm thông báo lỗi.

Câu trả lời:


8

Làm cách nào tôi có thể kiểm tra độ dài tối đa được phép của đường dẫn của ổ cắm tên miền Unix, trên Linux

Trên Linux, độ dài này thường được định nghĩa là 108.

Nó được xác định bởi UNIX_PATH_MAXbiến trong /usr/include/linux/un.htệp tiêu đề:

cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX"

#define UNIX_PATH_MAX   108

Bạn có thể tìm thêm thông tin ở đây:


Có một lý do tại sao địa chỉ đường dẫn ổ cắm Unix bị giới hạn nhiều hơn PATH_MAX không?
CMCDragonkai

6

Trên Mac OS X, theo unixtrang man:

UNIX-domain addresses are variable-length filesystem pathnames of at most
104 characters.  The include file <sys/un.h> defines this address:

       struct sockaddr_un {
               u_char  sun_len;
               u_char  sun_family;
               char    sun_path[104];
       };

Đây là một chương trình biên dịch trên cả Linux và OS X sẽ tạo ra độ dài tối đa của đường dẫn của một ổ cắm miền unix.

#include <sys/un.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    struct sockaddr_un s;
    printf("%lu\n", sizeof(s.sun_path));
    return 0;
}

Trên Linux, nó xuất ra 108và trên OS X, nó xuất ra 104.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.