[Linux]Linux printf 输出重定向
方法一
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h> int main()
{
fflush(stdout);
setvbuf(stdout,NULL,_IONBF,);
printf("test stdout\n");
int save_fd = dup(STDOUT_FILENO); // 保存标准输出 文件描述符 注:这里一定要用 dup 复制一个文件描述符. 不要用 = 就像是Winodws下的句柄.
int fd = open("test1.txt",(O_RDWR | O_CREAT), );
dup2(fd,STDOUT_FILENO); // 用我们新打开的文件描述符替换掉 标准输出
printf("test file\n"); //再恢复回来标准输出. 两种方式
//方法1 有保存 标准输出的情况
//dup2(save_fd,STDOUT_FILENO); //方法2 没有保存 标准输出的情况
int ttyfd = open("/dev/tty",(O_RDWR), );
dup2(ttyfd,STDOUT_FILENO);
printf("test tty\n");
}
方法二
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h> int main()
{
fflush(stdout);
setvbuf(stdout,NULL,_IONBF,);
printf("test stdout\n");
freopen("test1.txt","w",stdout); //注: 不要使用这类的代码 stdout = fopen("test1.txt","w"); 这样的话输出很诡异的. 最好使用 freopen 这类的函数来替换它.
printf("test file\n");
freopen("/dev/tty","w",stdout);
printf("test tty\n");
}
到这里我们就可以轻松解决 prinft 不输出到屏幕的问题了.
不外乎两种情况.
第1 标准输出被重定向了.
第2 输出缓冲区的问题. 就是 我们上两例中 开头的两行代码了.
fflush(stdout); // 刷新一下缓冲区 让它马上输出. 在printf 之后调用它,就会马上输出了.
setvbuf(stdout,NULL,_IONBF,0); //如果你嫌上个方法麻烦, 就使用这个函数. 直接将缓冲区禁止了. 它就直接输出了.
这两个函数都是有关流缓冲区的. 具体使用和说明网上有很多. 我只说一下什么是流缓冲区, 是做什么用的. 操作系统为减少 IO操作 所以设置了缓冲区. 等缓冲区满了再去操作IO. 这样是为了提高效率.
[Linux]Linux printf 输出重定向的更多相关文章
- Linux中的输出重定向
标准输入输出: 键盘 /dev/stdin 0 标准输入 显示器 /dev/stdout 1 标准输出 显示器 /dev/st ...
- linux 管道,输出重定向,后端执行
1. | (管道) $time|data:"Y-m-d"将前部的输出,作为后部的输入:配合管道使用的命令,典型的就是grep,more find --help | grep cne ...
- [Linux]Linux printf 输出重定向【转】
转自:http://www.cnblogs.com/aaronLinux/p/6765145.html?utm_source=itdadao&utm_medium=referral 方法一 # ...
- LINUX下printf输出字体的特效
在学习LINUX网络编程的时候我们做了一个聊天系统,当时为了界面更漂亮点,于是在百度上搜索了下关于printf()函数的用法,和大家分享下: 给pr ...
- linux进程后台运行及输出重定向
本机环境为ubuntu 14.04 以ping www.baidu.com为例: 1.程序的前台运行 ping www.baidu.com 可以看到,屏幕上输出了baidu返回的结果 2.实现程序后台 ...
- [转]linux shell数据重定向(输入重定向与输出重定向)详细分析
在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件 ...
- Linux实时将所有输出重定向到文件
Linux的重定向机制十分好用,我们经常需要在服务器上挂起一个服务程序,然后将该程序的所有输出重定向到某个文件,这样即使我们注销了用户,程序依然在linux服务器上运行着. 但是重定向的输出经常无法实 ...
- Linux标准输入、输出和错误和文件重定向(转) --- good
标准输入.输出和错误 当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名.下面就是这些文 ...
- Linux标准输入、输出和错误和文件重定向 专题
当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名. 下面就是这些文件描述符及它们通常所 ...
随机推荐
- [AngularJS] Angular 1.3 $submitted for Form in Angular
AngularJS 1.3 add $submitted for form, so you can use $submitted to track whether the submit event ...
- Discuz常见小问题-如何禁止用户发言,快速删除某个用户的所有帖子
用户-用户组,勾选批量编辑,然后点击批量编辑的链接 点击论坛相关-帖子相关,然后把指定用户组的允许发新话题设置为否,拉到底部,点击提交 以一个普通用户重新登录,尝试发帖报错,说明已经设置成功 ...
- synthesis-of-weak-property-only-allowed-in-arc-or-gc-mode ARC属性
synthesis-of-weak-property-only-allowed-in-arc-or-gc-mode ARC属性 错误提示: 1:确认你的项目是 ARC环境: 2:如果 ARC下出现上面 ...
- 偏最小二乘回归(PLSR)- 1 概览
1. 概览 偏最小二乘算法,因其仅仅利用数据X和Y中部分信息(partial information)来建模,所以得此名字.其总体处理框架体现在下面两图中. 建议先看第2部分,对pls算法有初步了解后 ...
- jQuery方法一览
Attribute: $(”p”).addClass(css中定义的样式类型); 给某个元素添加样式 $(”img”).attr({src:”test.jpg”,alt:”test Image”}); ...
- QueryRunner 结果处理器
package cn.itcast.dbutil; import java.sql.SQLException; import java.util.List; import java.util.Map; ...
- Android中 单位 介绍
看到有很多网友不太理解dp.sp和px的区别:现在这里介绍一下dp和sp.dp也就是dip.这个和sp基本类似.如果设置表示长度.高度等属性时可以使用dp 或sp.但如果设置字体,需要使用sp.dp是 ...
- spring的注解形式:@Repository、@Service、@Controller,
Spring的注解形式:@Repository.@Service.@Controller,它们分别对应存储层Bean,业务层Bean,和展示层Bean. @Repository.@Service.@C ...
- beyond compare 与git diff整合
这两天花了点时间最终在Window和Mac上把Beyong Compare和git整合好.当中遇到到非常多坑,如今把这些都分享出来.希望对大家有帮助. 首先如果你已经装好了Beyong Compare ...
- TeleMCU视频会议系统添加字幕支持
本文原创自 http://blog.csdn.net/voipmaker 转载注明出处. 最新版本号TeleMCU添加了字幕支持,与会者能够看到其它人的名字,做法是在与会者的视频上overlay 文 ...