tail head cat sleep
QR code linking to this page

Man page  — DIR

명칭

dir, dirent – 디렉토리 파일 포맷

내용

서식

#include <dirent.h>

해설

디렉토리는, 토대가 되는 기억 매체의 상세를 은폐 해, 파일을 그룹 나누고 하는 편리한 계층 수단을 제공합니다. 디렉토리 파일은, 그 inode(5) 엔트리중의 플래그에 의해, 통상 파일과 구별됩니다. 디렉토리 파일은 레코드 (디렉토리 엔트리)로부터 구성되어 각 레코드는 파일에 관한 정보와 그 파일 자신에게로의 포인터를 포함하고 있습니다. 디렉토리 엔트리는, 통상 파일과 같게, 다른 디렉토리를 포함하는 일도 있습니다. 그러한 상자가 된 디렉토리는 서브 디렉토리로 불립니다. 이와 같이 해 디렉토리와 파일의 계층 구조가 형성되어 이 구조는 파일 시스템으로 불립니다 (혹은 파일 시스템 트리 (으)로 불립니다).

각 디렉토리 파일에는 특별한 디렉토리 엔트리가 2 개 있습니다. 1 개(살)은 그 디렉토리 자신에게로의 포인터로, 닷 ‘.’ (으)로 불립니다. 이제(벌써) 1 개(살)은 자신의 친디렉토리에의 포인터로, 닷 닷 ‘..’ (으)로 불립니다. 닷과 닷 닷은 유효한 패스명입니다만, 시스템의 루트 디렉토리 ‘/’ 에는 친디렉토리가 없고, 닷 닷은 닷과 같이 자기 자신을 가리킵니다.

파일 시스템 노드는 보통 디렉토리 파일이며, 그 위에 물리 디스크나 그 디스크중의 분할된 area라고 했다 파일 시스템 오브젝트를 접합합니다 ( mount(2)mount(8) 참조).

디렉토리 엔트리의 형식은 파일 <sys/dirent.h> 그리고 정의되고 있습니다 (이것은 직접 어플리케이션으로부터는 인클루드 되지 않습니다):

#ifndef _SYS_DIRENT_H_
#define _SYS_DIRENT_H_

#include <machine/ansi.h>

/* * dirent 구조체는, getdirentries(2) 시스템 콜로 돌려주어진다 * 디렉토리 엔트리의 포맷을 정의합니다. * * 디렉토리 엔트리는 그 선두에 dirent 구조체를 가집니다. dirent * 구조체는 inode 번호, 그 엔트리의 길이, 그 엔트리에 포함된다 * 이름의 길이를 보관 유지합니다. 그 후에, 널로 4 바이트 경계까지 패딩 * 한 이름이 계속됩니다. 이름은 모두 널로 종단 하고 있는 것이 프로텍션됩니다. * 디렉토리안의 이름의 길이의 최대치는 MAXNAMLEN 입니다. */

struct dirent {         __uint32_t d_fileno;            /* 엔트리의 파일 번호 */         __uint16_t d_reclen;            /* 이 레코드의 길이 */         __uint8_t d_type;              /* 파일 타입, 이하 참조 */         __uint8_t d_namlen;            /* d_name 의 캐릭터 라인장 */ #ifdef _POSIX_SOURCE         char    d_name[255 + 1];        /* 이름은 이 길이를 넘어서는 안 된다 */ #else #define MAXNAMLEN 255         char d_name[MAXNAMLEN + 1]; /* 이름은 이 길이를 넘어서는 안 된다 */ #endif

};

/* * 파일 타입 */ #define DT_UNKNOWN       0 #define DT_FIFO          1 #define DT_CHR           2 #define DT_DIR           4 #define DT_BLK           6 #define DT_REG           8 #define DT_LNK          10 #define DT_SOCK         12 #define DT_WHT          14

/* * stat 구조 체형과 디렉토리형과의 변환 */ #define IFTODT(mode)    (((mode) & 0170000) >> 12) #define DTTOIF(dirtype) ((dirtype) << 12)

/* * _GENERIC_DIRSIZ 매크로는 디렉토리 엔트리를 보관 유지하는 최소 레코드장을 * 줍니다. 이것은 d_name 필드 이외의 dirent 구조체의 공간에, 널 * 바이트로 종단 되는 이름을 위해서(때문에) 충분한 공간 (dp->d_namlen+1)을 더한 것 * (을)를, 4 바이트 단위로 앞당긴 것입니다. */ #define _GENERIC_DIRSIZ(dp) ((sizeof (struct dirent) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))

#ifdef _KERNEL #define GENERIC_DIRSIZ(dp)      _GENERIC_DIRSIZ(dp) #endif

#endif /* ! _SYS_DIRENT_H_ */

관련 항목

fs(5), inode(5)

버그

struct dirent 의 멤버 d_type 는 FreeBSD 고유하고, 사용은 휴대용이 아닙니다. 또, 특정의 파일 시스템, 예를 들면 cd9660 파일 시스템에서는 실패합니다.

역사

파일 형식 dirAT&T v7 그리고 등장했습니다.

DIR (5) April 19, 1994

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.