[英]How to redirect output to a file in C?
我正在尝试在 C 中:
在分配要求中,它说使用以下命令编译和运行程序:
gcc -o name name.c
./name inputFileName.ext > outputFileName.ext
我不熟悉“ > ”命令。 我有一些问题:
在网上,它说
>
将命令输出重定向到一个文件,我不确定“命令输出”到底是什么意思。
“命令输出”指的是程序的stdout
(标准输出)流。
请注意,某些 shell 命令不是单独的程序,但实际上是shell 内置命令,尽管它们仍将支持输出重定向。 在 Windows 上,大多数 shell 命令(如dir
和del
)是内置的,而在 Linux/BSD/etc 上,大多数 shell 命令是单独的程序(如ls
和mkdir
)
如果您的程序调用puts( "foobar" );
然后从 Bash 运行./name
将在您的终端模拟器中显示“foobar”。 但是如果你运行./name > file.txt
那么“foobar”文本将被写入file.txt
并且它不会显示在你的终端模拟器中。
尝试使用ls
命令,例如: ls -al > files.txt
。 这也适用于 Windows ( dir /s > files.txt
)。
我正在将
name.c
文件的输出重定向到outputFileName.ext
文件。 命令输出是否意味着标准输出?
是的。
如果是这样,我将使用哪个 C 关键字将信息从 name.c 作为 stdout 写入 outputFileName.ext 文件?
你没有。 这是一个 shell/OS 功能,不是 C 的一部分。
让我们澄清一些事情:
>
、 <
和其他一些符号(与您的问题无关)是命令行解释器(又名 shell)的控制运算符。 当 shell 看到其中的任何一个时,它假定程序的命令行参数现在已经完成。 所以在你的情况下,你的程序将有argc=2
和argv = ["name ", "inputFileName.ext"]
。stdout
(在调用printf()
putchar()
时默认使用, puts()
)写入屏幕的任何内容都将写入>
之后的文件名。 你的程序完全不知道这个事实。 在您的代码中,您应该假设您正在屏幕上打印。 执行命令的人负责执行重定向。 (另外:“outputFileName.ext”不需要存在,如果不存在,它将被创建,但重定向将覆盖以前在该文件中写入的任何内容,因此要格外小心,不要意外重定向到 .c 文件或者您之前执行的结果,如果您同时需要它们)<
(不是在您的问题中,而是密切相关)与您想象的相反,程序从该文件而不是从键盘读取输入。 (显然该文件现在需要存在) 对于问题的第二部分,您可以(并且应该)通过argv[1]
的内容访问输入文件的名称。 您将打开文件并通过一些将文件描述符作为参数的 C 函数(如fscanf()
、 fgets()
、 getline()
)从中读取。
最后,你确定给你的命令是
./name inputFileName.ext > outputFileName.ext
并不是
./name < inputFileName.ext > outputFileName.ext
?
后者对输入和输出都使用重定向,并且在读取时不应该做任何不同的事情,只需从stdin
正常读取即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.