我想知道当名称在命令行上回显时,在 C 中读取文件名的最佳方法是什么,例如:如果我输入
echo test.txt | a1
我将如何访问test.txt
using
fopen(fname, "r");
?
我想知道当名称在命令行上回显时,在 C 中读取文件名的最佳方法是什么,例如:如果我输入
echo test.txt | a1
我将如何访问test.txt
using
fopen(fname, "r");
?
当您将数据从一个程序传送到另一个程序时,就好像您将第一个程序的输出输入到第二个程序中一样。在这种情况下,文件名可以从标准输入读取,读取它的一种方法是使用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
获取有关如何检测此问题的详细信息。
按照它的编写方式,您将每行尝试一次处理,并且程序在输入流结束时停止。
您正在尝试从标准输入读取,这意味着您可以使用fread
( man 3 fread
on *nix,如果您不是,请在此处。) 从中读取。
stdin
只是标准文件描述符的名称,因此您可以像读取任何其他文件一样读取它。