linux freopen函数


编程之路刚刚开始,错误难免,希望大家能够指出。

有些需求需要我们不断的输入数据很庞大,如果我们安装常规方法不断地在终端输入值很麻烦(前提是输入的数据是固定的,并不会随程序的运行而改变),这个时候我们就可以调用freopen函数来解决这个麻烦。

freopen一般都是将stdin和stdout重定向。

FILE * freopen ( const char * filename, const char * mode, FILE * stream )

filename: 要打开的文件名。

mode: 文件打开的模式,和fopen中的模式相同。

stream: 文件指针,通常使用标准流文件(stdin/stdout/stderr)。

返回值:成功,则返回一个文件指针;失败,返回NULL(一般不会使用它的返回值,但是建议判断它的结果,养成良好的习惯)。 

例子:每次提供20个整数,分别计算出它们各自乘以2的积。

  1.创建文件"input.txt"和"output.txt"对应stdin和stdout。

  

  2.编写代码"test.cpp":

 1 #include 
 2 #include 
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int num = 0;
 9     int sum = 0;
10 
11     if(NULL == freopen("input.txt","r",stdin))
12     {
13         printf("open input.txt failed!\n");
14         return -1;
15     }
16     if(NULL == freopen("output.txt","w",stdout))
17     {
18         printf("open output.txt failed\n");
19         return -2;
20     }
21 
22     while(scanf("%d",&num) != EOF)
23     {
24         sum = num * 2;
25         printf("%d * 2 = %d\n",num,sum);
26     }
27 
28     fclose(stdin);
29     fclose(stdout);
30 
31     return 0;
32 }

  3.往"input.txt"文件内每行添加一个整数:

  4.g++ test.cpp  ./a.out

这个例子简单,但主要是说明一下什么样需求可能会用到freopen函数。

相关