UC编程:输入输出重定向(标准IO)
[c]
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char szBuf[100];
/* 将屏幕标准输出的内容重定向到文件 */
if((fp = freopen("./1", "w", stderr)) == NULL)
{
perror("freopen");
return EXIT_FAILURE;
}
/* stderr已经输出重定向,所有的错误输出都将写入文件./1中 */
fputs("I like linux.", stderr);
/* 关闭文件 */
fclose(fp);
/* 将标准输入由键盘输入更改为从文件./1中读入*/
if((fp = freopen("./1" ,"r", stdin)) == NULL)
{
perror("freopen");
return EXIT_FAILURE;
}
memset(szBuf, 0, sizeof(szBuf));
/* stdin已经输入重定向, 所有内容都将写入文件./1中 */
fgets(szBuf, sizeof(szBuf), stdin);
printf("szBuf = [%s]\n", szBuf);
/* 关闭文件 */
fclose(fp);
return 0;
}
[/c]
上面的程序摘自《精通Unix下C语言编程与项目实践》
运行结果:
[code]
[sincerefly@localhost UC]$ ./a.out
szBuf = [I like linux.]
[sincerefly@localhost UC]$
[/code]
也就是说,通过使用标准库中的freopen函数实现了输入输出的重定向
再来多看看两个例子,来自freopen函数的百度百科
举例1:
[c]
#include <stdio.h>
int main()
{
/* redirect standard output to a file */
if (freopen("D:\\OUTPUT.txt", "w", stdout)==NULL)
fprintf(stderr, "error redirecting stdout\n");
/* this output will go to a file */
printf("This will go into a file.");
/* close the standard output stream */
fclose(stdout);
return 0;
}
[/c]
举例2:
[c]
#include <stdio.h>
int main()
{
int i;
if (freopen("./OUTPUT.txt", "w", stdout)==NULL)
fprintf(stderr, "error redirecting\stdout\n");
for(i=0;i<10;i++)
printf("%3d",i);
printf("\n");
fclose(stdout);
return 0;
}
[/c]
从文件in.txt中读入数据,计算加和输出到out.txt中
举例3:
[c]
#include <stdio.h>
int main()
{
freopen("in.txt","r",stdin); /*如果in.txt不在连接后的exe的目录,需要指定路径如./in.txt*/
freopen("out.txt","w",stdout);/*同上*/
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
printf("%d\n",a+b);
fclose(stdin);
fclose(stdout);
return 0;
}
[/c]
若要返回到显示默认 stdout) 的 stdout,使用下面的调用:
freopen( "CON", "w", stdout ); //输出到控制台"CON"
检查 freopen() 以确保重定向实际发生的返回值。
下面是短程序演示了 stdout 时重定向
举例4:
[c]
/*Compile options needed: none*/
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
FILE *stream ; //将内容写到file.txt, "W"是写 ("r"是读)
if((stream = freopen("file.txt", "w", stdout)) == NULL)
exit(-1);
printf("this is stdout output\n");
stream = freopen("CON", "w", stdout);/*stdout 是向程序的末尾的控制台重定向*/
printf("And now back to the console once again\n");
}
[/c]
UC编程:输入输出重定向(标准IO)的更多相关文章
- (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (四)Linux Shell编程——输入输出重定向
Unix 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输入设备就是键盘,标准输出设备就是终端,即显示器. 1. 输出重定向 命令的输出不 ...
- (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (十一) 一起学 Unix 环境高级编程 (APUE) 之 高级 IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口
最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...
- 二、linux IO 编程---系统调用和POSIX标准和标准IO
2.1 系统调用 2.1.1 概念 所谓系统调用(system call)是指曹错系统提供给用户程序的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的特殊服务. 应用程序可以 ...
- C++(四十六) — 异常处理机制、标准IO输入输出
1.异常处理机制 一般来说,异常处理就是在程序运行时对异常进行检测和控制.而在C++ 中,使用 try-throw-catch模式进行异常处理的机制. #include<iostream> ...
- 【转载】标准输入输出重定向(Visual C++)
原文:标准输入输出重定向(Visual C++) 引言 本人偶得在 Visual C++ 中进行输入输出重定向的办法,比通常的做法“freopen”更加的灵活和方便,特在此共享.目前,代码正在不断地摸 ...
- shell编程 之 输入输出重定向
1 输入输出重定向 标准输入:从终端得到命令,对于计算机来说,是从终端获得了命令,执行完了以后,结果和执行状态或者错误提示又会发回终端,这叫标准输出. 输入输出重定向就是从终端以外的别的地方得到输入, ...
- linux 标准输入输出 重定向
背景: 屏幕打印不一定都是从标准输出来的,也包括标准错误输出流stderr中的信息 文件描述符定义(系统定义了12个) 0 标准输入 1 标准输出 2 标准错误 0 默认键盘输入 1,2默认从屏幕 ...
随机推荐
- 折返(Reentrancy)VS线程安全(Thread safety)
在Wiki上,折返例如,下面的定义(接) In computing, a computer program or subroutine is called reentrant if it can be ...
- HTML5 获得canvas油漆环境
笔者:本笃庆军 原文地址:http://blog.csdn.net/qingdujun/article/details/32925369 我们用的最主要的画图环境在canvas中画图.通过调用canv ...
- 【MySQL笔记】mysql来源安装/配置步骤和支持中国gbk/gb2312编码配置
不久的学习笔记.分享.我想有很大的帮助谁刚开始学习其他人的 备注:该票据于mysql-5.1.73版本号例如 1. mysql源代码编译/安装步骤 1) 官网下载mysql源代码并解压 2) cd至源 ...
- ORDER BY RAND()
大概是因为需要研究了一下MYSQL随机样本实现.例如:离tablename表随机抽取了创纪录,我们一般的写法是:SELECT * FROM tablename ORDER BY RAND() LIMI ...
- 整理php操作memcache缓存为基础的方法
php操作memcache共享缓存方法 采用memcache的前提下,是需要在服务器端被配置memcahche环境! 证实memcahce经过正常的连接可以在程序中使用! <?php /** * ...
- springMvc的注解注入方式
springMvc的注解注入方式 最近在看springMvc的源码,看到了该框架的注入注解的部分觉的有点吃力,可能还是对注解的方面的知识还认识的不够深刻,所以特意去学习注解方面的知识.由于本人也是抱着 ...
- Linux 火狐浏览器安装Flash插入
Linux系统安装完毕,找到Firefox浏览器和视频播放器不能总是提示安装Flash.而据火狐浏览器的提示Flash插件安装总是失败,能手动安装Flash插件啦. 到Flash官网:http://g ...
- RTP 记录 log 该机制
我们 RCV 在这里,经常跑concurrent request RTP: Receiving Transaction Processor, 它主要是用来处理 RCV_TRANSACTIONS_INT ...
- 运行时间(Java版本)—转换毫秒到时分秒日期
第一种方式: import java.util.Calendar; import java.util.TimeZone; public class Test { /** * 将毫秒转换为年月日时分秒 ...
- 判断sqlserver对象是否存在
--查看对象是否已经存在 --数据库是否存在 --if exists (select * from sys.databases where name = ’数据库名’) -- dro ...