2014年度情報科学実験1システムコールプログラミングのページ

資料および課題 第2回

プログラム例

  1. 入出力システムコールを使ったプログラムの例(1)
    1. 標準入力からの入力をそのまま標準出力に出力するプログラム。
    2. 標準入力からテキストを入力し、各行の行末に $ を追加して、標準出力に出力するプログラム。
    3. コマンドライン引数で指定したファイルの中身をそのまま標準出力に出力するプログラム。

readシステムコールの使用上の注意

read()は読み込みに失敗しなければ返値として実際に読み込んだバイト数を返します。 したがって、入力したバイト列を操作することは、readの返値を変数に代入しておき、 その値までくりかえすループを書くことで実現できます。 たとえば、chocolate.cstrawberry.cで行っている次のようなコードをよく書きます。

	while ((len = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
		for (j = 0; j < (size_t)len; j ++) {
			(略)
		}
		(略)
	}

注意すべきことがいくつかあります。

課題

    1. lemon.c とほぼ同等の機能を持つプログラムを、標準入出力ライブラリを使わず、入出力システムコールを使って書け。
    2. mint.c とほぼ同等の機能を持つプログラムを、標準入出力ライブラリを使わず、入出力システムコールを使って書け。
    3. vanilla.cchocolate.cstrawberry.cの機能を併せ持つプログラムを書け。ファイル名が指定されていればそのファイルから入力し、いなければ標準入力から入力せよ。オプション -e があれば各行の行末に $ を追加し、なければそのまま出力せよ。