Stéphane Gimenez의 게시물을 확장하려면 새 디렉토리를 작성하는 것은 st_mode 값이 S_IFDIR (권한 모드가 있음) 인 새 inode를 작성하고 링크를 사용하여 새 inode의 첫 번째 데이터 블록에 두 개의 항목을 작성하는 프로세스입니다 ( 2) 시스템 호출 : '.' 이 새로운 inode를 가리키고 '..'는 부모 디렉토리를 가리키고, inode와 새로운 디렉토리의 이름으로 부모 디렉토리에 엔트리를 생성합니다-첫 번째와 마지막 부분은 시스템 호출 mknod ( 2). 또한 요즘 우리가 이야기하는 작업에는 root 만 mknod (2)를 사용할 수 있습니다.
예를 들어 mkdir("/home/larry.user/xyzzy", 0666)
본질적으로 다음과 같습니다 (SysV days [1]의 C 코드 임).
int mode = 0666;
char newdir[] = "/home/larry.user/xyzzy";
char path1[NAMESZ+4, path2[NAMESZ+4], *p;
mknod(newdir, S_IFDIR|mode);
strcpy(path1, newdir);
strcat(path1, "/."); /* "." link */
link(newdir, path1);
strcat(path1, "."); /* ".." link */
strcpy(path2, newdir);
if ((p = strrchr(path2, '/') == (char *)0) /* root directory */
link(".", path1);
else {
*p = '\0';
link(path2, path1);
}
- Haviland & Salama, "UNIX 시스템 프로그래밍", 1987, pp69-71.
이것은 오류가 발생하기 쉽고 fsck의 주된 이유 중 하나이므로 mkdir (2) 시스템 호출이 작성되었습니다.
amy 파일 시스템 객체는 mknod (2)로 생성 될 수 있습니다 : 일반 파일, 디렉토리, 장치 파일, 심볼릭 링크 등. OP의 질문 중 하나에 대답하기 위해 디렉토리는 파일입니다. "I / O 인터페이스로 작동하는 파일 시스템에 상주하는 inode로 표시되는 객체입니다."