0

次のように、コマンドラインで名前がエコーされたときに、C でファイル名を読み取る最良の方法は何だろうと思っていました。

echo test.txt | a1

test.txtを使用して アクセスするにはどうすればよいfopen(fname, "r");ですか?

4

3 に答える 3

3

あるプログラムから別のプログラムにデータをパイプすると、最初の出力を 2 番目のプログラムに入力したかのようになります。この場合、ファイル名は stdin から読み取ることができ、それを読み取る 1 つの方法はfgets関数を使用することです。

于 2013-09-21T23:50:26.600 に答える
1
  1. 標準入力からデータを読み取ります。

  2. データを処理します。

#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 回処理を試行し、入力ストリームが終了するとプログラムは停止します。

于 2013-09-22T16:37:47.240 に答える
0

stdin から読み取ろうとしています。つまり、fread( man 3 fread*nix では、そうでない場合はここで) を使用して読み取ることができます。

stdinは、標準のファイル記述子の単なる名前であるため、他のファイルと同じように読み取ることができます。

于 2013-09-21T23:51:33.517 に答える