我需要知道如何在Unix中使用Unix参数&lt;和&gt;有人告诉我,如果我用./program < input file > output file
运行程序,程序将从文件中读取,并在<
后面声明,并且它将写出文件,并在>
之后声明
实际上代码看起来像这样
int main(int argc, char** argv)
{
FILE* filein = fopen(argv[1], "r");
FILE* fileout = fopen(argv[2], "w");
...
所以我想把我在程序中声明的文件放在这里处理,因为我将在程序中稍后使用filein
和fileout
。
我只允许使用stdio.h
,所以请保持基本。
先谢谢
答案 0 :(得分:3)
此shell cmd语法
./program < input_file > output_file
不必对传递给main
的参数做任何事情int main(int argc, char** argv) {
您可以参考std::cin
和std::cout
查看上述输入和输出文件。
它是一个shell功能,称为标准输入/输出流重定向。如果您想通过argv
将额外参数传递给您的计划,您通常会使用以下语法
./program -x --opt1 < input_file > output_file
正如你所说
&#34;我只允许使用
stdio.h
,所以请保持基本。&#34;
在这种情况下,您可以使用预定义的stdin
/stdout
宏。
FILE* filein = stdin;
FILE* fileout = stdout;
这是您应该使用的默认值。如果您希望具有附加功能,即用户将特定输入/输出文件名指定为程序参数,则还应检查传递给main的命令行参数:
int main(int argc, char* argv[]) {
FILE* filein = stdin;
FILE* fileout = stdout;
if(argc > 1) {
filein = fopen(argv[1], "r");
}
if(argc > 2) {
fileout = fopen(argv[2], "w");
}
}
默认情况下,如果按上述方式执行,程序将从标准输入读取并写入标准输出。因此,只需在没有任何参数的情况下调用程序,就会提示用户输入内容。
这是实现控制台程序的首选且最灵活的样式,它应该处理流式输入和转换(处理)到任何输出。
答案 1 :(得分:3)
void main()
{
printf("Hello World");
}
这是一个简单的例子&#39;&gt;&#39; CMD
如果你编译上面的代码,然后运行cmd
./program
控制台中的将输出Hello World
如果你跑
./program >1.txt
然后您将在控制台中看不到输出,但您会在文件夹中找到名为1.txt
的文件(只有我们ls
cmd才能看到文件)
和int 1.txt
(使用vim 1.txt
查看内容)您将看到输出Hello World
在这种情况下>
cmd用于将输出从console
重定向到1.txt
文件
答案 2 :(得分:1)
这是一个有效的例子:
#include <stdio>
int main(void)
{
// Read in the data from the piped file
std::string text;
std::cin >> text;
// Send output to the redirected output file
std::cout << text;
return 0;
}
同样,不需要使用fopen
或FILE
类型的任何变量,因为操作系统已重定向 cin
流以使用该文件用这个程序输入。
编辑1:使用C风格的I / O
您也可以使用标准输入和标准输出来使用C-stlye I / O.
#include <cstdio>
int main(void)
{
int a;
scanf("%d", &a);
printf("%d\n", a);
return 0;
}
无论您使用的是C风格的I / O还是C ++ I / O,操作系统都会重定向标准的输入和输出流,以便从您传递的文件(通过重定向)读取和写入程序。
答案 3 :(得分:0)
&lt;和&gt;是重定向器,你只需要从stdin读取并写入stdout。您的程序将读取&#34;输入文件&#34;的内容。通过stdin和你的程序写入stdout的所有内容都将在输出文件中。
您不需要自己处理这些文件。
答案 4 :(得分:0)
从UNIX shell运行程序时,使用输入和输出重定向将导致shell将标准输出和输入流重定向到这些文件。一旦发生这种情况,您的程序就不需要也不会知道它。只需像往常一样使用printf
和scanf
(等)。