2012-10-20 39 views
13

Tôi đã bắt đầu làm việc với thư viện dirent.h và tôi bắt gặp một thành viên rất hữu ích của struct structent strentter mà struct dirent * p-> d_name trong cuốn sách của tôi. Nhưng đáng tiếc là nó không nói bất kỳ thành viên nào khác của cấu trúc này;Thành viên của cấu trúc Dirent

Tôi đã tự hỏi những thành viên khác của cấu trúc này là gì và chúng được sử dụng để làm gì?

Trân

+2

Tôi cho rằng bạn đang sử dụng Linux. Trong trường hợp đó, chỉ cần đọc trang hướng dẫn dirent.h ('man dirent.h'). –

+1

@NikosC. 'Không có mục nhập thủ công nào cho dirent.h' –

+2

@ Hi-Angel Bạn đang bỏ lỡ gói trang-người đàn ông POSIX. (Dù nó được gọi là gì trong bản phân phối Linux của bạn. Trên tôi (Gentoo), đó là sys-apps/man-pages-posix). –

Trả lời

20

Cấu trúc, struct dirent đề cập đến mục nhập thư mục.

http://www.gnu.org/software/libc/manual/html_node/Directory-Entries.html

Trong linux nó được định nghĩa là:

struct dirent { 
    ino_t   d_ino;  /* inode number */ 
    off_t   d_off;  /* offset to the next dirent */ 
    unsigned short d_reclen; /* length of this record */ 
    unsigned char d_type;  /* type of file; not supported 
            by all file system types */ 
    char   d_name[256]; /* filename */ 
}; 

tham khảo: man readdir

Hoặc chỉ cần tìm kiếm "dirent.h" trong thư mục bao gồm.

+2

Như được viết trong câu trả lời khác, chỉ 'd_ino' và' d_name' là [POSIX] (https://en.wikipedia.org/wiki/POSIX). Phần còn lại nên tránh, hoặc tệ hơn được sử dụng rất thận trọng, và chỉ khi bạn hiểu được những tác động. –

2

Chỉ có hai thành viên (từ wikipedia):

  • ino_t d_ino - nộp sê-ri số
  • char d_name[] - tên của entry (sẽ không vượt quá kích thước của NAME_MAX)

Hãy xem qua số unix spec.

+1

Có thể có một số thành viên khác (triển khai hoặc hệ thống cụ thể), nhưng bạn không nên sử dụng chúng vì lý do di chuyển POSIX. –

1

ngoài câu trả lời trên của @Binyamin Sharet:

off_t d_off - file offset 
    unsigned short int d_reclen - length of the dirent record 
    unsigned short int d_namlen - length of name 
    unsigned int d_type - type of file 
+3

Không nên sử dụng chúng. Chúng được thực hiện cụ thể và không được xác định bởi POSIX. Bạn có lẽ nên cập nhật câu trả lời của bạn để phản ánh điều đó. –

+0

cách thức hoạt động của d_type? – Naruto

+0

một số hệ thống tệp (ví dụ: ext4, xfs) trong một số cấu hình (thường là tại thời gian mkfs) có thể phân phối loại (một số hoặc tất cả) mục nhập thư mục (biểu tượng DT_ *). Nếu không biết, chúng là DT_UNKNOWN. Thành viên d_type không phải là di động, nhưng vẫn có sẵn rộng rãi. –

Các vấn đề liên quan