2011-05-11 5 views
0

私は以下の非常に簡単なプログラムを持っています。エラー:コマンドライン引数を送信しているときにコマンドが見つかりません

#include<stdio.h> 
void main(int argc, char *argv[]) 
{ 
    printf("\n %s",argv[3]); 
} 

は、実行可能ファイルがa.outという名前が付けられ言うとO_WRONLYオープンパス/に/私/ a.outファイル$ /としてそれを実行している|。O_APPEND は、コマンドno検出されたエラーを示します。 ここで、$。/ a.outオープンパス/ to/my/fileとして実行しているとします。O_WRONLY は、出力O_WRONLYを出力します。

|

貴重な時間をいただきありがとうございます。

+1

エスケープそれを:

は、あなたのコマンドライン引数の前後に引用符を入れて、この動作を回避するために、 './a.out open path/to/my/file O_WRONLY '|' O_APPEND' –

+0

@Johnありがとうございます。 –

答えて

2

シェルはO_APPENDの前に|をパイプとして使用し、存在しないためこのコマンドを認識しません。try $./a.out open path/to/my/file "O_WRONLY|O_APPEND"

また、void mainを使用していないパイプ文字|はシェルにとって特別な意味を持ってint main(彼らはそれを見る場合はここにいくつかの人々が心臓発作を取得する可能性があります:))

+0

ありがとう...: - )(ええ、私は主が多くのC正教会に心臓発作を起こすと思います)\ –

2

を使用します。それはを作成しますパイプラインでは、あるプロセスの出力が別のプロセスの入力にパイプされます。 foo | barと入力すると、シェルはコマンド行がfoobarの2つのプロセスを生成し、前者の出力を後者の入力に接続します。 O_APPEND`たりしてみてください| `O_WRONLYオープンパス/には/私/ファイルを./a.out \:このような

$ ./a.out open path/to/my/file "O_WRONLY|O_APPEND" 
+0

ありがとうございます...今はとても愚かな質問のようです –

関連する問題