我正在尝试,以C:
在分配要求中,它表示要使用以下命令来编译和运行程序:
gcc -o name name.c
./name inputFileName.ext > outputFileName.ext
我不熟悉“>”命令。我有几个问题:
[在线,它说>
将命令输出重定向到文件,但我不确定“命令输出”到底是什么意思。
“命令输出”是指程序的stdout
(标准输出)流。
请注意,尽管某些Shell命令仍支持输出重定向,但它们不是单独的程序,但实际上是shell builtins。在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
文件。命令输出是否表示stdout?
是
如果是这样,我将使用哪个C关键字以stdout的身份将信息从name.c写入outputFileName.ext文件?
你不知道。这是Shell / OS功能,不属于C。
>
,<
和其他一些符号(与您的问题无关)是命令行解释器(也称为外壳程序)的控制运算符。当shell看到其中任何一个时,它假定程序的命令行参数现在已完成。因此,根据您的情况,您的程序将具有argc=2
和argv = ["name ", "inputFileName.ext"]
。stdout
(在调用printf()
putchar()
,puts()
时默认使用此方法)写到屏幕上的任何内容都将写入到以下文件名中在>
之后。您的图表完全没有意识到这一事实。在您的代码中,您应该仅假设您正在屏幕上进行打印。执行命令以执行重定向的人员的责任。 (此外:“ outputFileName.ext”不需要存在,如果不存在,则将创建它,但是重定向<
(不在您的问题中,但密切相关)的工作方式与您想象的相反,程序从该文件而不是从键盘读取输入。 (显然该文件现在需要存在)argv[1]
的内容访问输入文件的名称。您将打开文件,并通过一些以文件描述符作为参数的C函数从中读取文件(例如fscanf()
,fgets()
,getline()
)。最后,确定给您的命令是
./name inputFileName.ext > outputFileName.ext
不是
./name < inputFileName.ext > outputFileName.ext
?
后者将重定向用于输入和输出,并且您在读取时不应做任何不同,只需从stdin
正常读取。