2017-04-09 5 views
1

私は現在、猫のプログラムに取り組んでいます。パイプやリダイレクション演算子をunixで解析するには?

./catpr file1 file2 file3 | grep string 

私はパイプ演算子が存在するが指摘により、解析の終了をマークする方法がわからない:私が午前問題は、私は、UNIXのコマンドを実行したときにということです。私は現在、システムコールを使用してCでこのcatプログラムを開発しています。したがって、引数を追跡するためにargvを使用します。しかし、配列内の '|'に対応するコンテンツを見るたびに、本当に変わったものが表示されます。

+1

"私は、配列の中で '|'に対応するコンテンツを見るときに、本当に変わったものが表示されます._" - コードを表示してください。 if(strcmp(argv [4]、 "|")== 0) 'のようなものが動作します。 –

+4

パイプはシェルによって解釈されます。あなたはそれに対処する必要はありません。 – Ryan

+2

配列の最後を読み取っている可能性があります。あなたの 'argc'を確認してください。 –

答えて

-1

基本的に必要なのは、3つのファイルでパターンを検索する必要があるということです。

あなたができることを実行するための呼び出しは、入力引数としてプログラムに渡すことを指定しているためです。ただ、ただ、プログラム内部

./catpr FILE1 FILE2 FILE3文字列

をコンパイルするために、以下のんのgrepでシステムコールを与えます。私はあなたのために完全なプログラムを提供しています。私はこれがあなたが必要とするものであることを望みます。

#include <stdio.h> 
#include <string.h> 
int main(int a,char *argv[]) 
{ 
    char com[256]=""; 
    strcat(com,"cat "); 
    strcat(com,argv[1]); 
    strcat(com," "); 
    strcat(com,argv[2]); 
    strcat(com," "); 
    strcat(com,argv[3]); 
    strcat(com," | grep "); 
    strcat(com,argv[4]); //this is your search pattern 
    system(com); 
} 
+0

上記の答えに何が問題なのですか? – Sridharan

+0

これは質問とは関係ありません。 –

+0

**システムコールを使用していると言及していない場合、これは答えではないかもしれません。これは彼がやろうとしていることを行うための別の方法です。 – Sridharan

関連する問題