はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ の予習ということで Sixth Edition Unix のソースを読んでいます。
で、ユーザランドで動くコマンドのソースを漁っていたら、みんな大好き echo のソースを見つけました。
mtime が1975年 5月14日 と設定されているのが小粋ですね
$ /bin/ls -hl s1/echo.c -rw-r--r--@ 1 hiroya staff 134B 5 14 1975 s1/echo.c
main(argc, argv) int argc; char *argv[]; { int i; argc--; for(i=1; i<=argc; i++) printf("%s%c", argv[i], i==argc? '\n': ' '); }
OSXの gcc でコンパイル・実行したらまんま動いてくれて(素朴なコードだし、一応warningが出ていますが) ああ これC言語、ごいすー、と思った次第です。
$ gcc s1/echo.c -o /tmp/echo s1/echo.c: In function ‘main’: s1/echo.c:9: warning: incompatible implicit declaration of built-in function ‘printf’ $ /tmp/echo あけおめ あけおめ $ /tmp/echo ジョジョ おれは借金を返済したぞー! ジョジョ おれは借金を返済したぞー!
私自身は全くもってOSの開発者ではなく、アプリケーションを利用する側からLinux カーネル を理解してみたいという関心の延長の延長といった具合で Sixth Edition Unix のソースを斜め読みしていますが、現在の*NIX でも同じ名前で利用されているシステムコールやカーネル用関数の原型を見つけて 温故知新ですねぇうんうん、と感慨を深めています。