先週の@magoroku15さんのustで、システムコール番号の歴史が参照され、V7にはmkdirシステムコールがなくて、mknodとlinkを使っていたんだよねという話題が出てきた。それに触発され、mkdirについて調べてみたところ、試行錯誤の痕がいろいろ見られ面白かったのでまとめてみた。 まず、V7のmkdir.cを読むと、mknodでinodeを作り*1、自分(".")と親("..")にlinkを張っているのがわかる。mknodはinodeは作るがファイルの中身はからっぽで、ディレクトリとしては正しいフォーマットではない。最低限自分と親ディレクトリへの参照が必要だからだ。そこで、linkを使う。UNIXファイルシステムのディレクトリエントリの構造については説明不要だよね。 mkdir(d) char *d; { char pname[128], dname[128]; registe