如何将输出重定向到 C 中的文件?
How to redirect output to a file in C?
我正在尝试,在 C 中:
- 从文件中读取数据
- 操纵数据
- 将操作数据写入另一个文件
在赋值要求中,它说编译和运行程序使用以下命令:
gcc -o name name.c
./name inputFileName.ext > outputFileName.ext
我不熟悉“>”命令。我有几个问题:
- 网上说“>”将命令输出重定向到一个文件,我不确定"command output"到底是什么意思。我正在将 name.c 文件的输出重定向到 outputFileName.ext 文件。命令输出是否意味着标准输出?如果是这样,我将使用哪个 C 关键字将信息作为标准输出从 name.c 写入 outputFileName.ext 文件?
- 当我打开并读取我的输入文件时,我需要访问从命令行传入的文件。 “>”字符算作另一个命令行参数吗?我仍然可以使用语句“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 命令(如 dir
和 del
)是内置的,而在 Linux/BSD/etc 上,大多数 shell 命令是单独的程序(像 ls
和 mkdir
)
如果您的程序调用 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 的一部分。
让我们澄清一些事情:
>
、<
和其他一些符号(与您的问题无关)是命令行解释器的控制运算符(a.k.a shell ).当 shell 看到其中任何一个时,它假定您的程序的命令行参数现在已完成。所以在你的情况下,你的程序将有 argc=2
和 argv = ["name ", "inputFileName.ext"]
.
- "redirection" 意味着无论您的程序通常通过
stdout
写入屏幕(在调用 printf()
putchar()
时默认使用,puts()
) 将写入 >
之后的文件名。你的 pogram 完全没有意识到这个事实。在您的代码中,您应该假设您正在屏幕上打印。执行命令的人有责任执行重定向。 (另外:"outputFileName.ext" 不需要存在,如果不存在就会创建它,但是重定向 将覆盖之前在该文件中写入的任何内容,所以要格外小心,不要重定向到.c 文件意外或您之前执行的结果,如果您同时需要它们)
<
(不在您的问题中,但密切相关)的工作方式与您想象的相反,程序从该文件而不是键盘读取输入。 (显然该文件现在需要存在)
对于问题的第二部分,您仍然可以(并且应该)通过 argv[1]
的内容访问输入文件的名称。您将打开文件并通过一些将文件描述符作为参数的 C 函数从中读取文件(例如 fscanf()
、fgets()
、getline()
)。
最后,你确定给你的命令是
./name inputFileName.ext > outputFileName.ext
而不是
./name < inputFileName.ext > outputFileName.ext
?
后者对输入和输出都使用了重定向,阅读时你不应该做任何不同的事情,只是从stdin
正常阅读。
我正在尝试,在 C 中:
- 从文件中读取数据
- 操纵数据
- 将操作数据写入另一个文件
在赋值要求中,它说编译和运行程序使用以下命令:
gcc -o name name.c
./name inputFileName.ext > outputFileName.ext
我不熟悉“>”命令。我有几个问题:
- 网上说“>”将命令输出重定向到一个文件,我不确定"command output"到底是什么意思。我正在将 name.c 文件的输出重定向到 outputFileName.ext 文件。命令输出是否意味着标准输出?如果是这样,我将使用哪个 C 关键字将信息作为标准输出从 name.c 写入 outputFileName.ext 文件?
- 当我打开并读取我的输入文件时,我需要访问从命令行传入的文件。 “>”字符算作另一个命令行参数吗?我仍然可以使用语句“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 命令(如 dir
和 del
)是内置的,而在 Linux/BSD/etc 上,大多数 shell 命令是单独的程序(像 ls
和 mkdir
)
如果您的程序调用 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 theoutputFileName.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 的一部分。
让我们澄清一些事情:
>
、<
和其他一些符号(与您的问题无关)是命令行解释器的控制运算符(a.k.a shell ).当 shell 看到其中任何一个时,它假定您的程序的命令行参数现在已完成。所以在你的情况下,你的程序将有argc=2
和argv = ["name ", "inputFileName.ext"]
.- "redirection" 意味着无论您的程序通常通过
stdout
写入屏幕(在调用printf()
putchar()
时默认使用,puts()
) 将写入>
之后的文件名。你的 pogram 完全没有意识到这个事实。在您的代码中,您应该假设您正在屏幕上打印。执行命令的人有责任执行重定向。 (另外:"outputFileName.ext" 不需要存在,如果不存在就会创建它,但是重定向 将覆盖之前在该文件中写入的任何内容,所以要格外小心,不要重定向到.c 文件意外或您之前执行的结果,如果您同时需要它们) <
(不在您的问题中,但密切相关)的工作方式与您想象的相反,程序从该文件而不是键盘读取输入。 (显然该文件现在需要存在)
对于问题的第二部分,您仍然可以(并且应该)通过 argv[1]
的内容访问输入文件的名称。您将打开文件并通过一些将文件描述符作为参数的 C 函数从中读取文件(例如 fscanf()
、fgets()
、getline()
)。
最后,你确定给你的命令是
./name inputFileName.ext > outputFileName.ext
而不是
./name < inputFileName.ext > outputFileName.ext
?
后者对输入和输出都使用了重定向,阅读时你不应该做任何不同的事情,只是从stdin
正常阅读。