C ++启动程序<输入文件>输出文件

时间:2014-10-25 15:45:12

标签: c++ file input command-line output

我需要知道如何在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");

...

所以我想把我在程序中声明的文件放在这里处理,因为我将在程序中稍后使用fileinfileout

我只允许使用stdio.h,所以请保持基本。

先谢谢

5 个答案:

答案 0 :(得分:3)

此shell cmd语法

./program < input_file > output_file

不必对传递给main

的参数做任何事情
int main(int argc, char** argv) {

您可以参考std::cinstd::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;
}

同样,不需要使用fopenFILE类型的任何变量,因为操作系统已重定向 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将标准输出和输入流重定向到这些文件。一旦发生这种情况,您的程序就不需要也不会知道它。只需像往常一样使用printfscanf(等)。