【原】从/dev/null重新打开标准输出
今天遇到一个程序,使用了printf输出中间的信息,我也懒得去改。由于此进程被其他进程fork之后,dup2 了标识输入输出到了/dev/null,再通过execvp装载进来。于是,为了看到输出的信息,写了一段类似如下的代码:
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> int main(int argc,char* argv[])
{
int fd = open("/dev/null", O_RDWR, 0); if(-1 != fd)
{
printf("before dup2...\n");
dup2(fd,STDOUT_FILENO);
printf("after dup2...\n");
sleep(20); FILE* fp = freopen("reopen.txt","w+",stdout); if(fp != 0)
{
fputs("fputs output ...\n",fp);
} printf("printf output ...\n");
sleep(20); }
return 0;
}
可以进入到/proc/进程标识/fd下,ls -a 查看进程的文件描述符的变化。
文件描述符和文件指针的转换
FILE *中除了包含了fd信息,还包含了IO缓冲,是C标准形式,所以FILE *比fd更适合跨平台。
通过以下函数调用进行转换
int fileno(FILE *stream);
FILE *fdopen(int fd, const char *mode);
【原】从/dev/null重新打开标准输出的更多相关文章
- linux中Shell标准输出错误 >/dev/null 2>&1 分析【转】
Shell中可能经常能看到:>/dev/null 2>&1 eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print ...
- Shell标准输出、标准错误 >/dev/null 2>&1
Shell中可能经常能看到:>/dev/null 2>&1 eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print ...
- Shell脚本———— /dev/null 2>&1详解
1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和 ...
- shell中>/dev/null 2>&1
本文转自http://www.kissyu.org/ 背景 我们经常能在shell脚本中发现>/dev/null 2>&1这样的语句.以前的我并没有去深入地理解这段命令的作用,照搬 ...
- linux下详解shell中>/dev/null 2>&1
前言 相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句.以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>& ...
- linux 重定向命令详解(如1>/dev/null 2>&1)
基础 0:表示标准输入stdin 1:表示标准输出stdout,系统默认为1,可省略(即1>/dev/null等价于>/dev/null) 2:表示标准错误stderr >:表示重定 ...
- [转帖]shell 中的>/dev/null 2>&1 是什么鬼?
shell 中的>/dev/null 2>&1 是什么鬼? http://blog.jobbole.com/109355/ 背景 我们经常能在shell脚本中发现>/dev/ ...
- shell之“>/dev/null 2>&1”
shell之“>/dev/null 2>&1” http://ixdba.blog.51cto.com/2895551/526442 今天在自己的一个技术群中又被问道了这么一个问题 ...
- 【shell】使用 /dev/null crontab
1.linux组成kernel.shell.工具程序有sh.bash 一个例子 !#/bin/bash echo '' 执行之前chmod +x 执行./ 2.一个小窍门 cp /dev/null / ...
随机推荐
- MaterialDesignLibrary
https://github.com/navasmdc/MaterialDesignLibrary MaterialDesignLibrary.zip
- Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发
关于QGis的二次开发,大致看了一下,基本都是在VC+QT的环境下做环境部署,并且QGis的版本号很老.在mingw下直接开发搭建好开发环境的样例少之又少.基于最新的Qgis2.4.0版本号做了对应的 ...
- easyui textarea IE8中无法换行
经查 原代码textarea 应用了"textbox"css样式. 默认 white-space:nowrap; 修改为 "nornal",问题解决.
- Android开发 侧边滑动菜单栏SlidingMenu结合Fragment
SlidingMenu是一个开源项目, https://github.com/jfeinstein10/SlidingMenu .功能是创建侧边滑动菜单栏,效果类似人人Android客户端,可点击按钮 ...
- XtraBackup原理4
MySQL · 答疑解惑 · 物理备份死锁分析 背景 本文对 5.6 主备场景下,在备库做物理备份遇到死锁的case进行分析,希望对大家有所帮助. 这里用的的物理备份工具是 Percona-XtraB ...
- Mysql中自增字段(AUTO_INCREMENT)的一些常识
Mysql中自增字段(AUTO_INCREMENT)的一些常识: http://chengxuyuan.naxieshir.com/fenlei/2/p/151.html
- Team Queue
Team Queue Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 2471 Accepted: 926 Descrip ...
- request 和response 中的setCharacterEncoding区别
response和request的setCharacterEncoding 一.request.setCharacterEncoding():是设置从request中取得的值或从数据库中取出的值. 指 ...
- HDU 3085 Nightmare Ⅱ (双向BFS)
Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- Java中windows路径转换成linux路径等工具类
项目中发现别人写好的操作系统相关的工具类: 我总结的类似相关博客:http://www.cnblogs.com/DreamDrive/p/4289860.html import java.net.In ...