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 <stdio.h> 2 #include <iostream> 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函数。