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.

Ken Thompson was once asked by a reporter what he would have changed about Unix if he had it all to do over again. His answer: “I would spell creat with an ‘e.'”