Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

『例解UNIX/Linuxプログラミング教室 システムコールを使いこなすための12講 』章末問題(5章の5)

最近、Linux環境を使うこともなくなり、またC言語でプログラムを作るということもなくなってきたのですが、遠ざかると寂しさ、懐かしさが込み上げてくるもので、そんなときに出会ったのがこの本でした。

大学卒業後は、我流でやっているので、本書のように体系立てて説明してくれる本はありがたいですね。もう一度しっかりと学んでみようと思っているので、面白そうな章末問題については解いていきたいなと思います。

第5章は、プロセスでした。プログラムの流れが1本の指でたどれるようなプログラムと違って、並列で処理が進んでいくプログラムは難しいですよね。

章末問題5の問題は、

という点で、良い勉強になるのではと取り組んでみたのですが、改善ポイントがたくさんあると思います。コメント欄などでアドバイスがいただけたらありがたいです。

第5章 章末問題 5.

今、10個のテキストファイル a0.txt, a1.txt, a2.txt,...,a9.txt があるとして、これらのテキストファイルからそれぞれの先頭の行を取り出して集め、それらをアルファベット順にソートして画面に表示したいとします。この処理を以下のように実現するプログラムを作ってみましょう。

  1. プログラムが実行されてプロセスができると、そのプロセスは10個の子プロセスをforkで作り、それぞれにテキストファイルの名前を1つずつ渡す。
  2. それぞれの子プロセスは、指定したファイルから先頭の1行を読み、それを一時ファイルtmp.txtに追加モードで書く。書いたら子プロセスは終了します。
  3. 親プロセスは、全ての子プロセスが終了したら、tmp.txtの内容をメモリに読む。
  4. 選んだ行をソートし、画面に表示する。

プログラム例(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
(以下、ソートされたテキストが表示される)