0

我想知道当名称在命令行上回显时,在 C 中读取文件名的最佳方法是什么,例如:如果我输入

echo test.txt | a1

我将如何访问test.txtusing fopen(fname, "r");

4

3 回答 3

3

当您将数据从一个程序传送到另一个程序时,就好像您将第一个程序的输出输入到第二个程序中一样。在这种情况下,文件名可以从标准输入读取,读取它的一种方法是使用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获取有关如何检测此问题的详细信息。

按照它的编写方式,您将每尝试一次处理,并且程序在输入流结束时停止。

于 2013-09-22T16:37:47.240 回答
0

您正在尝试从标准输入读取,这意味着您可以使用fread( man 3 freadon *nix,如果您不是,请在此处。) 从中读取。

stdin只是标准文件描述符的名称,因此您可以像读取任何其他文件一样读取它。

于 2013-09-21T23:51:33.517 回答