[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中的interval定时执行功能
一个例子,用来显示当前实时时间,1秒钟刷新一次: <!DOCTYPE html> <html ng-app="myApp"> <head> &l ...
- UDP Sockets in C#
UDP provides an end-to-end service different from that of TCP. In fact, UDP performs only two functi ...
- STL - 常用顺序容器代码
不多说,看代码 #include <iostream> #include <vector> #include <deque> #include <list&g ...
- IDEA20181.4破解
1.下载破解补丁: http://idea.lanyus.com/jar/JetbrainsIdesCrack-4.2-release-sha1-3323d5d0b82e716609808090d3d ...
- 区域医疗移动医疗影像解决方案--基于HTML5的PACS--HTML5图像处理【转】
基于HTML5的PACS--图像伪彩 摘要: 要查看此系统更多的图像处理功能请参考:区域医疗移动医疗影像解决方案--基于HTML5的PACS--HTML5图像处理套用句广告语:哪里不会点哪里,so e ...
- 算法笔记_040:二进制幂(Java)
目录 1 问题描述 2 解决方案 2.1 从左至右二进制幂 2.2 从右至左二进制幂 1 问题描述 使用n的二进制表示,计算a的n次方. 2 解决方案 2.1 从左至右二进制幂 此方法计算a的n次 ...
- SqlServer聚合函数
聚合函数对一组值计算后返回单个值.除了count(统计项数)函数以外,其他的聚合函数在计算式都会忽略空值(null).所有的聚合函数均为确定性函数.即任何时候使用一组相同的输入值调用聚合函数执行后的返 ...
- CentOS6.5搭建MySQL5.1主从复制
环境: mysql> select version(); +------------+ | version() | +------------+ | 5.1.73-log | +-------- ...
- Hbuilder 常用快捷键
网上搜了一下,对Hbuider的快捷键 另外还有一些实用的组合键: Alt+T→V (检验语法文档) Alt+L→H (代码历史版本)
- 用python实现的的手写数字识别器
概述 带GUI界面的,基于python sklearn knn算法的手写数字识别器,可用于识别手写数字,训练数据集为mnist. 详细 代码下载:http://www.demodashi.com/de ...