【Linux调试技巧----标准输出重定向到文件】dup2和dup的妙用
来源:互联网 发布:怎样在淘宝上卖手机 编辑:程序博客网 时间:2024/06/05 02:09
dup and dup2的剖析
dup
和dup2
都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file
结构体。如果两个文件描述符指向同一个file
结构体,File Status Flag和读写位置只保存一份在file
结构体中,并且file
结构体的引用计数是2。如果两次open
同一文件得到两个文件描述符,则每个描述符对应一个不同的file
结构体,可以有不同的File Status Flag和读写位置。请注意区分这两种情况。
#include <unistd.h>int dup(int oldfd);int dup2(int oldfd, int newfd);
如果调用成功,这两个函数都返回新分配或指定的文件描述符,如果出错则返回-1。dup
返回的新文件描述符一定该进程未使用的最小文件描述符,这一点和open
类似。dup2
可以用newfd
参数指定新描述符的数值。如果newfd
当前已经打开,则先将其关闭再做dup2
操作,如果oldfd
等于newfd
,则dup2
直接返回newfd
而不用先关闭newfd
再复制。
下面这个例子演示了dup
和dup2
函数的用法,请结合后面的连环画理解程序的执行过程。
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int fd, save_fd;
char msg[] = "This is a test\n";
fd = open("somefile", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
if(fd<0) {
perror("open");
exit(1);
}
save_fd = dup(STDOUT_FILENO);
dup2(fd, STDOUT_FILENO);
close(fd);
write(STDOUT_FILENO, msg, strlen(msg));
dup2(save_fd, STDOUT_FILENO);
write(STDOUT_FILENO, msg, strlen(msg));
close(save_fd);
return 0;
}
{
int fd, save_fd;
char msg[] = "This is a test\n";
fd = open("somefile", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
if(fd<0) {
perror("open");
exit(1);
}
save_fd = dup(STDOUT_FILENO);
dup2(fd, STDOUT_FILENO);
close(fd);
write(STDOUT_FILENO, msg, strlen(msg));
dup2(save_fd, STDOUT_FILENO);
write(STDOUT_FILENO, msg, strlen(msg));
close(save_fd);
return 0;
}
0 0
- 【Linux调试技巧----标准输出重定向到文件】dup2和dup的妙用
- linux—dup和dup2重定向文件描述符
- dup/dup2输出重定向
- 用dup2将标准输出重定向到一个打开的文件,稍后,恢复标准输出
- APUE之dup,dup2函数重定向标准输出实例
- Linux--重定向dup&&dup2
- linux 经典的例子 解释 dup dup2 文件描述符重定向函数 输入输出重定向
- linux 经典的例子 解释 dup dup2 文件描述符重定向函数 输入输出重定向
- linux 经典的例子 解释 dup dup2 文件描述符重定向函数 输入输出重定向
- dup/dup2 标准输入输出重定向
- 利用dup/dup2重定向标准输入输出
- linux:文件描述符重定向dup&dup2
- [linux]--使用dup和dup2重定向和还原
- linux句柄重定向之dup和dup2
- linux句柄重定向之dup和dup2
- Linux重定向:将标准输出stdout和标准错误stderr重定向到一个文件
- 文件描述符的重定向:dup/dup2
- 文件描述符重定向---dup&dup2
- 删除、去掉字符串尾部的0或者某个特定字符(递归实现)
- 一个windows应用程序内部到底有没有DLL文件的代码呢???它是如何调用DLL的???
- leetcode难度及面试频率
- CSS3总结
- 龙的师父----良师的意义
- 【Linux调试技巧----标准输出重定向到文件】dup2和dup的妙用
- 硬件处理和软件处理之间的异同与边界
- libpods.a 缺少、红色 解决办法
- 关系操作符(测试对象的等价性:判断对象的引用相等或对象的实际内容相等)附带源码
- [POJ 1190] 生日蛋糕
- Oracle 利用储存过程插入循环插入大量数据方法
- 判断无向图G是否连通
- VMWare Workstation 11.0安装Mac OS虚拟机(一)
- Android 快速开发系列 打造万能的ListView GridView 适配器