หากต้องการขยายโพสต์จากStéphane Gimenez การสร้างไดเรกทอรีใหม่คือกระบวนการสร้าง inode ใหม่ที่มีค่า st_mode ของ S_IFDIR (พร้อมโหมดสิทธิ์) สร้างสองรายการในบล็อกข้อมูลแรกของ inode ใหม่พร้อมลิงค์ ( 2) การโทรของระบบ: '.' จุดใดชี้ไปที่ไอโหนดใหม่นี้และ '.. ' ซึ่งชี้ไปที่ไดเร็กทอรีพาเรนต์จากนั้นสร้างรายการในไดเร็กทอรีพาเรนต์ที่มีไอโหนดและชื่อของไดเร็กทอรีใหม่ - ส่วนแรกและส่วนสุดท้ายถูกเรียกโดยระบบ mknod ( 2) นอกจากนี้มีเพียง root เท่านั้นที่สามารถใช้ mknod (2) ในวันนี้เพื่องานที่เรากำลังพูดถึง
ตัวอย่างเช่นmkdir("/home/larry.user/xyzzy", 0666)
มีดังต่อไปนี้ (นี่คือรหัส C จาก SysV วัน [1]):
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, "การเขียนโปรแกรมระบบยูนิกซ์", 1987, pp69-71
นี่เป็นข้อผิดพลาดง่ายเกินไป (และหนึ่งในเหตุผลหลักสำหรับ fsck) ดังนั้นการเรียกระบบ mkdir (2) ถูกสร้างขึ้นเพื่อให้สามารถทำสิ่งนี้ให้คุณได้
โปรดทราบว่าวัตถุระบบไฟล์ amy สามารถสร้างขึ้นด้วย mknod (2): ไฟล์ปกติ, ไดเรกทอรี, ไฟล์อุปกรณ์, symlink ฯลฯ ดังนั้นเพื่อตอบคำถามของ OP อย่างใดอย่างหนึ่งใช่ไดเรกทอรีคือไฟล์ซึ่งหมายความว่า "มัน เป็นวัตถุที่แสดงโดย inode อาศัยอยู่ในระบบแฟ้มซึ่งทำงานกับอินเทอร์เฟซ i / o "