Mimic

大学編入や、英語学習、プログラミングなど様々な記事を取り扱うブログ。お金を稼ぎたい

自作cat コマンドにオプション-nで行数表示をしてみた。

f:id:michinoins:20180513072128j:plain

 

今回はcatコマンドに行数を表示させる-nのオプション付きで作ってみました。

 

 

catコマンド自体はたくさんソースが転がっていましたが、-nのオプション付きは中々見つからなかったので需要があるかと.

 

ただ、コードを見直して思ったのですが

 

 

めちゃくちゃ頭悪い...

 

 

絶対もっといい書き方できるだろ...というコードです。

 

これは参考程度にして自分なりにもっと見やすくわかりやすいコードを書くことをお勧めします。

 

以下にコード、説明を載せるのですがスクロールして戻るのは面倒なので

別ウインドウに同じページを開いてプログラムを見つつ説明を読んでいただければと思います。

 

 

cat -nコマンドを作ってみたけどコードが頭悪そう - ちのログ

 

 

 

20行目、引数に"-n"があるかチェックしてなければ40行目以降で普通のcatをします。

catの説明を割愛します。

 

21~23行目で開くファイルの行数を求めます。

 

25行目で行数を表示するようにもう一度ファイルを開きます。

rが行数,aが現在の行数チェックになります。

 

29行目以降で一文字ずつfgecして"\n"の時には、putchar(c)をした後に行数rを出力する。

 

つまり行の最後に行ったら、改行して数字を出力する。という動作を期待します。

 

ここで、33行目,if(a<len)をしないと

期待の行数+1行表示してしまいます。

 

1:~~~~

2:~~~~

3:~~~~

4:

 

という状態になります。

初めの行だけはwhileのループ外で出力してr++しているので

 

whileループで行数+1の分だけrは進んでしまいます。

 

なので行数チェックaをわざわざ作って

事前にファイルの行数を求めて

 

という面倒なことをしています。

 

とまぁ、期待通りの動作をしてはくれますが

あまりパッとしないコードです.

 

一応実行結果はこんな感じ.

 

$ ./mycat -n file
1:Hello,I've been studying English.
2:I like soccer.
3:Do you like soccer?
4:yes I do.
5:What kind of soccer do you like?