2012-03-24 5 views
3

moreコマンドを実装しようとしています。私は、パイプがあるかどうかをどのように理解できるかを知りたい。たとえば、私がシェルから入力する場合"more" Unixユーティリティコマンドの実装

cat file1 file2 | more 

私はそれをより多くの実装の中で処理できますか?

moreの実装はオープンソースとして利用可能ですか?

実際に私はstdinを読むことで成功することができませんでした。私はもっとfile.txtをやっていましたが、catファイルはやっていませんでした。もっと..

私は最初にユーザーから読んで、バッファを印刷するよりもバッファを置くべきだと思います。私のコードには以下が含まれています:

if(argc == 1) 
{ 
    fgets(line, 255, 0); 
    printf("%s", line); 
} 

+0

Linuxディストリビューションからソースパッケージを入手してください。例えば、Fedoraでは、 'more'は' util-linux-ng'の一部です –

+1

パイプ 'command | more'と簡単な入力リダイレクション 'more

答えて

3

より多くの構文を使用すると、ファイル名を指定しない場合は、よりコマンドはSTDINからの入力を取得する

more [options] [file_name] 

です。あなたは、例えば、パイプを使用して(STDIN経由)、この入力を提供することができます。

cat file.txt | more 

これはよりにcatコマンドの出力を送信します。これは、以下の操作と同じです。

more file.txt 

パイプがあるかどうかを具体的に知る必要はありません。ファイル名がの場合はに引数として渡されたかどうかを確認するだけです。その場合、入力はファイルの内容とみなされます。そうでない場合、入力はstdinに由来するとみなされます。

ソースコードに関しては、いくつかのGoogle検索はあなたを遠くに連れて行くでしょう。ここではFreeBSDからいくつかの古いソースコードがある:Ubuntuのリポジトリから

http://svnweb.freebsd.org/base/stable/2.0.5/usr.bin/more/

以上recenteソース:

http://bazaar.launchpad.net/~vcs-imports/util-linux-ng/trunk/files/head:/text-utils/

0

は1と等しい場合uは最初、ARGCか等しい1をチェック示唆します、あなたはあなたのプログラムがcat cat.txtとして状況を扱うことができるように、あなたのinpoutファイルハンドルとしてstdinを使用します。 more

関連する問題