読者です 読者をやめる 読者になる 読者になる

1975年の echo.c

はじめての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': ' ');
}


OSXgccコンパイル・実行したらまんま動いてくれて(素朴なコードだし、一応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 でも同じ名前で利用されているシステムコールカーネル用関数の原型を見つけて 温故知新ですねぇうんうん、と感慨を深めています。