码迷,mamicode.com
首页 > 编程语言 > 详细

c/c++标准IO重定向

时间:2018-05-23 18:10:37      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:highlight   inux   dup   win   int   rdb   标准   调试   AC   

这个对OJ上做题很有用。OJ基本都是用标准输入输出(USACO除外)。但如果你在调试的时候也都是从控制台输入,那就太浪费宝贵的时间了。我们可以重定向标准输入,调试的时候从文件读,提交时从标准输入读。

在C语言中,方法比较简单。使用函数freopen():

 

  1. freopen("data.in","r",stdin);  
  2. freopen("data.out","w",stdout);  

 

这样就把标准输入重定向到了data.in文件,标准输出重定向到了data.out文件。

这两句代码之后,scanf函数就会从data.in文件里读,而printf函数就会输出到data.out文件里了。

C++中,对流重定向有两个重载函数:

 
  1. streambuf* rdbuf () const;  
  2. streambuf* rdbuf (streambuf *)  

 

就相当于get/set方法。

 
  1. streambuf *backup;  
  2. ifstream fin;  
  3. fin.open("data.in");  
  4. backup = cin.rdbuf();   // back up cin‘s streambuf  
  5. cin.rdbuf(fin.rdbuf()); // assign file‘s streambuf to cin  
  6. // ... cin will read from file  
  7. cin.rdbuf(backup);     // restore cin‘s original streambuf  

 

注意最后我们使用了cin.rdbuf(backup)把cin又重定向回了控制台

然而,如果用C语言实现同样的功能就不那么优雅了。

因为标准控制台设备文件的名字是与操作系统相关的。

在Dos/Windows中,名字是con

freopen("con", "r", stdin);

在Linux中,控制台设备是/dev/console

freopen("/dev/console", "r", stdin);

另外,在类unix系统中,也可以使用dup系统调用来预先复制一份原始的stdin句柄。

c/c++标准IO重定向

标签:highlight   inux   dup   win   int   rdb   标准   调试   AC   

原文地址:https://www.cnblogs.com/CreatorKou/p/9077899.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!