ゼロのマニュアル


アニメ『シュタインズ・ゲート ゼロ』

ゼロというタイトルだから、最初って意味で一期の前の話かと思ったのですが、そうじゃないんですね。岡部が普通の大学生になってます。いや普通というか、かっこよくなってます。岡部はまともになったのは、クリスのいない世界線だから。クリスいないとつまんないですよ、本当に。まあ、つまんないので当然登場するのだけど、ものすごくじらしてくれます。アニメの見せ方がうまいんです、なんか面白いです。

ゼロということで、zeroに関することで何かないかなあと探そうとして、とりあえずないとは思いましたが、man zeroでも入力してみたら、
ありました。zeroに関してのマニュアル。

ということで、man zero全文です。

NULL(4)              Linux Programmer's Manual             NULL(4)

名前
       null, zero - データの掃きだめ

説明
       null  または zero スペシャルファイル(special file)に 書かれ
       たデータは捨てられる。

       null スペシャルファイルを読むと常に end  of  file  が返され
       (つまり、  read(2)  は 0 を返す)、対照的 に zero を読むと常
       にバイト数 0 (\0 文字) が返される。

       null と zero は一般的に次のようにして作られる:

              mknod -m 666 /dev/null c 1 3
              mknod -m 666 /dev/zero c 1 5
              chown root:root /dev/null /dev/zero

ファイル
       /dev/null
       /dev/zero

注意
       これらのデバイスが全てのユーザーに対して読み書き可能でない
       場合、 多くのプログラムの動作がおかしくなるだろう。

関連項目
       chown(1), mknod(1), full(4)

この文書について
       この  man  ページは  Linux man-pages プロジェクトのリリース
       3.79 の一部  である。プロジェクトの説明とバグ報告に関する情
       報は http://www.kernel.org/doc/man-pages/ に書かれている。

Linux                       2009-02-23                     NULL(4)

zeroのmanは何だろうと不思議でしたが、/dev/zeroに関してのマニュアルだったんですね。(/dev/nullも)
それぞれlsの表示を確認してみます。

takk@deb9:~$ ls -l /dev/null /dev/zero
crw-rw-rw- 1 root root 1, 3  1月 30 19:02 /dev/null
crw-rw-rw- 1 root root 1, 5  1月 30 19:02 /dev/zero
takk@deb9:~$ 

それにしても、/dev/zeroの作り方が興味深いです。なかったら作ればいいんですね。
mknodのman、冒頭を見てみましょう。

MKNOD(1)                 ユーザーコマンド                 MKNOD(1)

名前
       mknod  - ブロックデバイス、キャラクタデバイスの特殊ファイル
       を作成する

書式
       mknod [OPTION]... NAME TYPE [MAJOR MINOR]

説明
       スペシャルファイル NAME をタイプ TYPE で作成します。

       長いオプションで必須となっている引数は短いオプションでも必
       須です。


mknodのようなファイルシステムに関するコマンドは、システムコールも当然存在すると思います。man 2 mknodも確認してみます。

MKNOD(2)             Linux Programmer's Manual            MKNOD(2)

名前
       mknod, mknodat - 特殊ファイルや通常のファイルを作成する

書式
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>
       #include <unistd.h>

       int mknod(const char *pathname, mode_t mode, dev_t dev);

       #include <fcntl.h>           /* AT_* 定数の定義 */
       #include <sys/stat.h>

       int mknodat(int dirfd, const char *pathname, mode_t mode, dev_t dev);

システムコールのmknodの冒頭部分でした。コマンドの名前とシステムコールの名前は、わざと合わせて分かりやすくしているんでしょうね。