方法一

 #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 输出重定向的更多相关文章

  1. Linux中的输出重定向

    标准输入输出: 键盘        /dev/stdin        0       标准输入 显示器    /dev/stdout      1       标准输出 显示器    /dev/st ...

  2. linux 管道,输出重定向,后端执行

    1. | (管道) $time|data:"Y-m-d"将前部的输出,作为后部的输入:配合管道使用的命令,典型的就是grep,more find --help | grep cne ...

  3. [Linux]Linux printf 输出重定向【转】

    转自:http://www.cnblogs.com/aaronLinux/p/6765145.html?utm_source=itdadao&utm_medium=referral 方法一 # ...

  4. LINUX下printf输出字体的特效

    在学习LINUX网络编程的时候我们做了一个聊天系统,当时为了界面更漂亮点,于是在百度上搜索了下关于printf()函数的用法,和大家分享下:                           给pr ...

  5. linux进程后台运行及输出重定向

    本机环境为ubuntu 14.04 以ping www.baidu.com为例: 1.程序的前台运行 ping www.baidu.com 可以看到,屏幕上输出了baidu返回的结果 2.实现程序后台 ...

  6. [转]linux shell数据重定向(输入重定向与输出重定向)详细分析

      在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件 ...

  7. Linux实时将所有输出重定向到文件

    Linux的重定向机制十分好用,我们经常需要在服务器上挂起一个服务程序,然后将该程序的所有输出重定向到某个文件,这样即使我们注销了用户,程序依然在linux服务器上运行着. 但是重定向的输出经常无法实 ...

  8. Linux标准输入、输出和错误和文件重定向(转) --- good

    标准输入.输出和错误 当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名.下面就是这些文 ...

  9. Linux标准输入、输出和错误和文件重定向 专题

    当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名. 下面就是这些文件描述符及它们通常所 ...

随机推荐

  1. HDU 4528 BFS 小明系列故事——捉迷藏

    原题直通车:HDU 4528 小明系列故事——捉迷藏 分析: 标记时加两种状态就行. 代码: #include<iostream> #include<cstring> #inc ...

  2. 不敢想象!Vim使用者的“大脑”竟是这样

    原始状态 我曾经观看过小提琴家非常有激情地拉弦演奏,我有了这种想法:也许我投入到文本编辑器中的脑细胞数量和他为投入所喜好的乐器的演奏中差不多吧.我还有种奇异的想象,当他独奏的时候,脑中的核磁共振图和我 ...

  3. HDU 5025图论之BFS

    点击打开链接 题意:从K走到T,S为怪,走的时候就多花费一秒,走到T时收集m把不同的钥匙.可是规定收集n之前,必须1~n-1所有收集完成,怪最多有5个 思路:怪最多就有5个,然后钥匙是1~9把,我们每 ...

  4. 面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式

    上一篇这里描写叙述了一个关于差异数据在开发过程中的一个长处,这里来演示另外一个特点:单机开发之无缝切换到C/S模式 一般C/S模式都面临一个问题: 就是开发过程中的调试难题,由于涉及到client和服 ...

  5. 使用Visual Studio 2017编译opencv 3.2版本

    一.背景介绍 opencv是一个很强大的开源的计算机视觉库,应用领域如人机互动,图像处理,人脸识别,和现实生活中智能设计的关系很紧密.现在官方提供的编译包中,c++的只提供了x64位的library, ...

  6. 算法笔记_043:最大连续子数组和(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力枚举法 2.2 动态规划法   1 问题描述 给定一个整数数组,数组里可能有正数.负数和零.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和 ...

  7. Android画布更新过程OnDraw调用过程

    onDraw是触发的外置接口,用户能够复写这种方法,这样当回调onDraw时,就能够绘制出用户须要的画面 这个接口方法相似onLayout的回调,利用layout(l,t,r,b)就能够触发. 而这里 ...

  8. UIScrollView 循环滚动,代码超简单

    如今非常多应用里面多多少少都用到了循环滚动,要么是图片.要么是view,或者是其它,我总结一下,写了个demo分享给大家. 先看代码之后在讲原理: 1.创建一个空的项目(这个我就不多说了). 2.加入 ...

  9. JDBC 关于Date格式

    package test; import java.sql.Connection; import java.util.Date; import java.sql.PreparedStatement; ...

  10. css-input与文字的对齐

    前言 目前中文网站上面的文字,就我的个人感觉而言,绝大多数网站的主流文字大小为12px,因为在目前高分辨率显示器屏幕下,11px的汉字,其像素点开始不 规整,文字不如12px来的显示良好.12px大小 ...