質問
から話を始めよ"ということをここに関連する課題の課題が出てきます。しかし、これは非常に小さいので、比較的軽微であり、割りになります。
では、Cプログラムを受け入力経由でコマンドライン引数ですが必要に:
$ ./program < input
どういっ約を受ける入力文字列として?毎回のようにしていを印刷する場合は、第3引数からargvを受けこのメッセージ:
入力:なファイルやディレクトリです。
解決
<シェルリダイレクトである - それはあなたのプログラムの外に処理されます。あなたが表示されますが、ファイル名「入力」の内容は、あなたの標準入力ストリームに送信されています。これは、彼らは通常、例えば、ファイル名を指定されたハンドルが、プログラムが動作するための一般的な方法ですsed
ます。
私は、私が思うだろう推測していた場合:
input: No such file or directory.
指定されたファイルを開くことができませんとしては、シェルから来ている:「入力」
一方、あなたが実際にあなたのプログラムに引数として< input
をしたい場合、あなたは脱出できるか、シェルがそれを解釈することはありませんので、それらを引用します。 (読者の練習として残しエスケープ: - )。)
他のヒント
./program < input
の構文は、「プログラムの標準のエントリにファイルの名前input
内のすべてをリダイレクトします」と言って特別なシェル構文です。
の入力を読み取るために、あなたのプログラムは、単に、標準入力の読み取り機能を使用するためにラインfgets
またはscanf
を持っています。
argv
の* nixのシステムでは、そこになりません。のことの三要素。あなたは、ほぼすべてのUnixライクなシェルでそのコマンドを実行すると、それは、これを行うようになります。
cat input | ./program
だからあなた./program
はargv
で唯一の要素を持っていますが、それはstdin
のファイルinput
なので、あなただけのstdin
から読んでいましたファイルを読むために。これはあなたのプログラムを設計するために完全に有効な方法であることに注意してください。ファイルを指定しない場合、多くのUNIXプログラムは、標準入力から読み込むように、あなたかもしれない他のプログラムからの入力で、パイプ(またはファイルから、この場合、中)。
何<
の後に来ることは、コマンドライン引数ではありません。ファイルの内容は、シェルによって、あなたのプログラムにパイプされます。
あなたがする必要があるすべては、標準入力から読み込まれ、あなたは、ファイルの内容を取得します。
あなたは、「<」エスケープする必要がありそうでない場合、シェルはそれを解析し、プログラムは、コマンドラインでそれを受信しません。
もしbashを使っている場合は、ます:
./program '<' input
または
./program \< input
その他のシェル(例えばWindowsのデフォルト、cmd.exe
、エスケープ文字ではなく、^
として\
を使用しています)違ったことを行う可能性があります。
このは、Unixシェルの事です。フォームsomeprogram < somefile
は、その入力としてsomefileというを使用して実行するようにsomeprogramに指示します。あなたは<
記号を含む別の何かをしたい場合は、それを引用する必要があります。
<
は、プログラムが指定されたファイル(入力)から、標準入力(stdin)だ読まれることを意味します。だから(fgets
、fread
、などを使用して)標準入力から読み込みます。
'<' オフのままにしておきます。あなたは、コマンドライン引数は、これを行う欲しいます:
$ ./program -Dflag 7 = ixnay FromDinger
あなたのアプリケーションでは、これを試してください:
int main( int argc, char **argv )
{
int i;
for( i = 0 ; i < argc ; ++i )
printf( "Arg %d = %s\n", i, argv[i] );
return 0;
}
あなたは「-Dflag」になります最初の引数は、と(インデックス1)あなたの第二引数(インデックス0)実行可能ファイルの名前であることがわかります。
と思いきや、実はこれは非常に共通に使われている技術プログラミングにおすすめ!◆-データプログラムのニーズがファイルに格納されてしましょうdata.txt し、webを使ってアプリケーションを"<の殻のようになります: ./プログラム < データです。txt
そこで、ソースコードに必要なものは何かのようになります:
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string tmp;
string full_content;
while (cin >> tmp)
full_content += " "+tmp;
cout << full_content << endl;
}
..気軽に味わえるすべてのファイルからデータを、文字列、空白で区切られた).
この一文について教えてくださいんです。[]'s
あなたは標準入力を読み取ることによって、それを得ることができます。