最近、Linux環境を使うこともなくなり、またC言語でプログラムを作るということもなくなってきたのですが、遠ざかると寂しさ、懐かしさが込み上げてくるもので、そんなときに出会ったのがこの本でした。
大学卒業後は、我流でやっているので、本書のように体系立てて説明してくれる本はありがたいですね。もう一度しっかりと学んでみようと思っているので、面白そうな章末問題については解いていきたいなと思います。
第5章は、プロセスでした。プログラムの流れが1本の指でたどれるようなプログラムと違って、並列で処理が進んでいくプログラムは難しいですよね。
章末問題5の問題は、
という点で、良い勉強になるのではと取り組んでみたのですが、改善ポイントがたくさんあると思います。コメント欄などでアドバイスがいただけたらありがたいです。
第5章 章末問題 5.
今、10個のテキストファイル a0.txt, a1.txt, a2.txt,...,a9.txt
があるとして、これらのテキストファイルからそれぞれの先頭の行を取り出して集め、それらをアルファベット順にソートして画面に表示したいとします。この処理を以下のように実現するプログラムを作ってみましょう。
- プログラムが実行されてプロセスができると、そのプロセスは10個の子プロセスをforkで作り、それぞれにテキストファイルの名前を1つずつ渡す。
- それぞれの子プロセスは、指定したファイルから先頭の1行を読み、それを一時ファイル
tmp.txt
に追加モードで書く。書いたら子プロセスは終了します。 - 親プロセスは、全ての子プロセスが終了したら、
tmp.txt
の内容をメモリに読む。 - 選んだ行をソートし、画面に表示する。
プログラム例(chap05_5.c)
実行結果
% gcc chap05_5.c && ./a.out 子プロセス開始:15593 子プロセス開始:15594 子プロセス開始:15595 子プロセス開始:15596 子プロセス開始:15597 子プロセス開始:15598 子プロセス開始:15599 子プロセス開始:15600 子プロセス開始:15601 子プロセス開始:15602 子プロセス終了:15593 子プロセス終了:15594 子プロセス終了:15601 子プロセス終了:15597 子プロセス終了:15598 子プロセス終了:15599 子プロセス終了:15600 子プロセス終了:15602 子プロセス終了:15596 子プロセス終了:15595 (以下、ソートされたテキストが表示される)