如何访问作为参数传递的文件的内容



我是C编程的新手,我想访问作为参数传递的文本文件的内容。

当我执行程序时:

./cat 10 60 < dog.txt

当我运行for循环来迭代参数时,它不会打印我作为参数传递的文件。

./cat
10
60

所以,我假设它不被认为是一个论点。但是,有没有一种方法可以像我那样传递文件名作为参数(./cat 10 60 < dog.txt(,然后访问其内容?

谢谢你的帮助,

<是shell提供的重定向运算符。

此操作符在其右侧打开文件进行读取,并且在默认情况下,将程序的标准输入(stdin(重新映射为此文件。

还可以指定哪个文件描述符以以下形式重新映射:

program [n]< file

其中[n]是一个数字。UNIX文件描述符和C标准库之间的典型映射是

  • 0-stdin
  • 1-stdout
  • 2-stderr

但也可以打开其他文件描述符,并使用man 2 read从中读取程序。


这是一个示例程序。注意这两组不同命令之间的差异:

这个

./a.out a b < file.txt

将在列出程序参数的部分下打印字符串ab,然后打印file.txt的内容。

而这个

./a.out a b file.txt

将在列出程序参数的部分下打印字符串abfile.txt,然后等待您在终端中键入内容。

#include <stdio.h>
int main(int argc, char **argv) {
size_t line = 0;
char buffer[256];

puts("--- argv ---");

for (int i = 0; i < argc; i++)
printf("arg #%d : %sn", i, argv[i]);

puts("--- stdin ---");
while (fgets(buffer, sizeof buffer, stdin))
printf("%4zu|%s", ++line, buffer);
}

在Unix系统上,每个文件都有三个标准文件描述符(映射到文件的数字(

0-标准1-标准偏差2-Stderr

当您使用重定向符号(<(时,bash会关闭通常从键盘读取的stdin,并将其重新映射到您重定向的文件dog.txt。

您是正确的,它没有作为参数传入,但您仍然可以通过使用read命令从文件0 读取数据

read(0, *buf, buf_size);

E: Barmar指出,应该使用stdio库从输入中读取,这是更标准的

最新更新