指定されたファイルの先頭からの指定行数を出力するプログラム myhead を作成してください.
雛形としてmain.c
が与えられます.このmain.c
を元に,与えられたそれぞれのステップに取り組んでください.
それぞれのステップを適切に実装できれば,その都度GitHubに変更を push してください.
- 第1引数には行数,第2引数にファイル名が与えられます.与えられたファイルを先頭から指定された行数までを標準出力に出力しなさい.
- 引数に複数のファイルが指定された場合,各ファイルを同様に処理しなさい.
- 引数にファイル名が与えられなかった場合は,標準入力から受け取りなさい.
第1引数には行数,第2引数にファイル名が与えられます. 与えられたファイルを先頭から指定された行数までを標準出力に出力しなさい.
./head 2 main.c # <- main.c の最初の2行を出力する.
#include <stdio.h>
#include <stdlib.h>
次の修正を行ってください.
- 9行目にファイルを開く処理を追加しましょう.
- 5行目の
print_head
関数の中身を実装しましょう.example
プロジェクトmain.c
のprint_file
関数の中身を参考にしましょう.- 繰り返しの先頭で,
line_number
とlimit
を比べて,limit
の方が大きければループを抜けましょう.
ステップ1の結果を元に,次の処理を追加してください. 引数に複数のファイルが指定された場合,各ファイルを同様に処理しなさい.
./head 2 main.c README.md # <- main.c, README.md の最初の2行を出力する.
#include <stdio.h> # <- main.c の内容.
#include <stdlib.h>
# Head # <- この行から README.md の内容.
次の修正を行いましょう.
perform
メソッド冒頭のif
文の条件と中身を修正しましょう.if
文の条件をargc == 3
からargc >= 3
に修正しましょう.if
文の中で,for(i = 2; i < argc; i++)
というループを作成し,ループ内でperform_each(argv[i], limit)
を呼び出しましょう.
ステップ2の結果を元に,次の処理を追加してください. 引数にファイル名が与えられなかった場合は,標準入力から受け取りなさい.
cat main.c | ./head 2 # <- 標準入力(main.c)の最初の2行を出力する.
#include <stdio.h> # <- main.c の内容.
#include <stdlib.h>
次の修正を行いましょう.
perform
メソッド冒頭のif
文の条件と中身を修正しましょう.if
文の条件をargc >= 3
からargc >= 2
に修正しましょう.- ステップ2で作成したループ終了後に,
argc == 2
の場合に,標準入力から受け取る処理を追加しましょう.print_head(stdin, limit)
を呼び出せば,標準入力から受け取って処理するようになります.