次のように、コマンドラインで名前がエコーされたときに、C でファイル名を読み取る最良の方法は何だろうと思っていました。
echo test.txt | a1
test.txt
を使用して
アクセスするにはどうすればよいfopen(fname, "r");
ですか?
次のように、コマンドラインで名前がエコーされたときに、C でファイル名を読み取る最良の方法は何だろうと思っていました。
echo test.txt | a1
test.txt
を使用して
アクセスするにはどうすればよいfopen(fname, "r");
ですか?
あるプログラムから別のプログラムにデータをパイプすると、最初の出力を 2 番目のプログラムに入力したかのようになります。この場合、ファイル名は stdin から読み取ることができ、それを読み取る 1 つの方法はfgets
関数を使用することです。
標準入力からデータを読み取ります。
データを処理します。
#include <stdio.h>
char buf[1024];
while (fgets(buf, sizeof buf, stdin))
{
printf("Read line: '%s'\n", buf);
FILE * fp = fopen(buf, "r");
if (fp)
{
// process the file
fclose(fp);
}
else
{
printf("No such file: %s\n", buf);
}
}
明らかな注意点は、ファイル名が 1023 文字を超える可能性があることです。fgets
これを検出する方法の詳細については、マニュアルを参照してください。
この記述方法では、1行に1 回処理を試行し、入力ストリームが終了するとプログラムは停止します。
stdin から読み取ろうとしています。つまり、fread
( man 3 fread
*nix では、そうでない場合はここで) を使用して読み取ることができます。
stdin
は、標準のファイル記述子の単なる名前であるため、他のファイルと同じように読み取ることができます。