StéphaneGimenezからの投稿を展開するには、新しいディレクトリを作成すると、S_IFDIRのst_mode値(アクセス許可モード)で新しいiノードを作成し、リンクで新しいiノードの最初のデータブロックに2つのエントリを作成します( 2)システムコール:「。」この新しいiノードを指し、「..」は親ディレクトリを指し、次にiノードと新しいディレクトリの名前で親ディレクトリにエントリを作成します-最初と最後の部分は、システムコール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 System Programming」、1987、pp69-71。
これはエラーが発生しやすい(およびfsckの主な理由の1つ)ため、mkdir(2)システムコールが作成され、これを実行できるようになりました。
amyファイルシステムオブジェクトは、通常のファイル、ディレクトリ、デバイスファイル、シンボリックリンクなどのmknod(2)で作成できることに注意してください。 i / oインターフェースで動作するファイルシステムに存在する、inodeで表されるオブジェクトです。」