如何将输出重定向到 C 中的文件?

How to redirect output to a file in C?

我正在尝试,在 C 中:

  1. 从文件中读取数据
  2. 操纵数据
  3. 将操作数据写入另一个文件

在赋值要求中,它说编译和运行程序使用以下命令:

gcc -o name name.c 
./name inputFileName.ext > outputFileName.ext

我不熟悉“>”命令。我有几个问题:

  1. 网上说“>”将命令输出重定向到一个文件,我不确定"command output"到底是什么意思。我正在将 name.c 文件的输出重定向到 outputFileName.ext 文件。命令输出是否意味着标准输出?如果是这样,我将使用哪个 C 关键字将信息作为标准输出从 name.c 写入 outputFileName.ext 文件?
  2. 当我打开并读取我的输入文件时,我需要访问从命令行传入的文件。 “>”字符算作另一个命令行参数吗?我仍然可以使用语句“argv[1]”从 main() 访问 inputFileName.ext 吗?

Online, it says that > redirects command output to a file, and I'm not sure exactly what "command output" means.

"command output"指的是程序的stdout(标准输出)流。

请注意,一些 shell 命令不是单独的程序,但实际上是 shell builtins,尽管它们仍然支持输出重定向。在 Windows 上,大多数 shell 命令(如 dirdel)是内置的,而在 Linux/BSD/etc 上,大多数 shell 命令是单独的程序(像 lsmkdir)

如果您的程序调用 puts( "foobar" );,那么 Bash 中的 运行ning ./name 将在您的终端仿真器中显示 "foobar"。但是如果你 运行 ./name > file.txt 那么 "foobar" 文本将被写入 file.txt 并且它不会显示在你的终端模拟器中。

ls命令试试,例如:ls -al > files.txt。这也适用于 Windows (dir /s > files.txt)。

I'm redirecting the output from my name.c file to the outputFileName.ext file. Does command output mean stdout?

是的。

If so, which C keyword would I use to write information to the outputFileName.ext file from name.c as stdout?

你不知道。这是一个 shell/OS 功能,不是 C 的一部分。

让我们澄清一些事情:

  1. >< 和其他一些符号(与您的问题无关)是命令行解释器的控制运算符(a.k.a shell ).当 shell 看到其中任何一个时,它假定您的程序的命令行参数现在已完成。所以在你的情况下,你的程序将有 argc=2argv = ["name ", "inputFileName.ext"].
  2. "redirection" 意味着无论您的程序通常通过 stdout 写入屏幕(在调用 printf() putchar() 时默认使用,puts()) 将写入 > 之后的文件名。你的 pogram 完全没有意识到这个事实。在您的代码中,您应该假设您正在屏幕上打印。执行命令的人有责任执行重定向。 (另外:"outputFileName.ext" 不需要存在,如果不存在就会创建它,但是重定向 将覆盖之前在该文件中写入的任何内容,所以要格外小心,不要重定向到.c 文件意外或您之前执行的结果,如果您同时需要它们)
  3. <(不在您的问题中,但密切相关)的工作方式与您想象的相反,程序从该文件而不是键盘读取输入。 (显然该文件现在需要存在)

对于问题的第二部分,您仍然可以(并且应该)通过 argv[1] 的内容访问输入文件的名称。您将打开文件并通过一些将文件描述符作为参数的 C 函数从中读取文件(例如 fscanf()fgets()getline())。

最后,你确定给你的命令是

./name inputFileName.ext > outputFileName.ext

而不是

./name < inputFileName.ext > outputFileName.ext

?

后者对输入和输出都使用了重定向,阅读时你不应该做任何不同的事情,只是从stdin正常阅读。