zt dup() 和 dup2()
#include <unistd.h>
int dup(int newfd);
int dup2(int newfd, int oldfd);
下面用一个简单的例子解释两个函数的用法和区别:
#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 of dup() & dup2()\n";
int test;
fd = open("somefile", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
if(fd<0) {
perror("open");
exit(1);
}
save_fd = dup(STDOUT_FILENO); //运行后save_fd指向STDOUT——FILENO,即save_fd指向标准输出
printf("save_fd=%d\n",save_fd); //测试用
test=dup2(fd, STDOUT_FILENO); //运行后STDOUT_FILENO指向fd所指向的文件,即STDOUT_FILENO指向somefile
printf("dup2_1=%d\n",test); //测试用 此时的标准输出不再指向显示器,因此该段测试将写入somefile文件中
close(fd);
write(STDOUT_FILENO, msg, strlen(msg)); //此时STDOUT_FILENO所指向的是somefile文件不再是标准输出流,因此该段将
//写入somefile文件中
test=dup2(save_fd, STDOUT_FILENO); //运行后STDOUT_FILENO指向save_fd所指向的文件,即标准输出流
printf("dup2_2=%d\n",test); //测试用 此时标准输出流重新指回显示器,因此该段测试将写入显示器
write(STDOUT_FILENO, msg, strlen(msg)); //此时STDOUT_FILENO所指向的便回标准输出流该段将写入显示器
close(save_fd);
return 0;
}
该程序运行后显示器上显示的内容为:
[crosslandy@localhost PIPE]$ ./dup_example
save_fd=4
dup2_2=1
This is a test
somefile文件内的内容为:
dup2_1=1
This is a test
注:本例子转自他人
zt dup() 和 dup2()的更多相关文章
- dup和dup2用法小结
今天和同学探讨了一下关于重定向输出到文件的问题,其中需要用到dup和dup2函数,因此来小小的总结一下. 首先来man一下: dup直接返回一个新的描述符和原来的描述符一样代表同一个资源,描述符的值就 ...
- Linux内核分析:dup、dup2的实现
一.首先需要看一下这两个函数的作用: #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd); 根据m ...
- dup和dup2函数
下面两个函数都可用来复制一个现存的文件描述符: #include<unistd.h> int dup(int filedes); int dup2(int filedes,int file ...
- dup和dup2函数以及管道的实现
疑问:管道应该不是这样实现的,因为这要求修改程序的代码 dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符.它们经常用来重定向进程的stdin.stdout和stderr. ...
- dup和dup2详解
C语言中dup和dup2函数的不同和使用 发表时间: 2012年11月15日 | 作者: 陈杰斌 | 所属分类: C语言 | 评论: 0 | 浏览: 1024 在unix高级编程中有介绍dup和dup ...
- dup和dup2应用实例(dup跟APUE有出入,close+dup=dup2?)
dup/dup2函数 有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接. dup()与dup2()能对输入文件描述符进行重定向. 函数原型如下: dup函数创建一个新的文件描 ...
- Linux系统编程--文件描述符的复制dup()和dup2()【转】
本文转载自:http://blog.csdn.net/tennysonsky/article/details/45870459 dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个 ...
- dup and dup2的剖析
转:http://www.cnblogs.com/sdphome/archive/2011/04/30/2033381.html dup和dup2都可用来复制一个现存的文件描写叙述符,使两个文件描写叙 ...
- dup()&dup2()
[dup()&dup2()] 都是复制文件描述符指针.dup2可以指定复制到哪一个新索引. 参考:http://hi.baidu.com/flikecn/item/e82e14bef06e8a ...
随机推荐
- nginx+uwsgi+virtualenv+supervisor部署项目
一.导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的 ...
- JS判断包括IE11在内的IE浏览器
function isIE() { //ie? if (!!window.ActiveXObject || "ActiveXObject" in window) return tr ...
- PIE SDK地图平移校正
地图平移校正,当加载两幅空间参考一样的影像,其中一幅影像有点偏移,这时就以另一幅影像为基准将其进行平移校正,然后保存,再次加载就不会出现偏移了. 下面来介绍下实现的主要代码: 首先通过选中目录树中的要 ...
- idea中使用restclient测试接口发送http请求
转载:https://jingyan.baidu.com/article/ca41422f0bfd8e1eae99ed31.html
- 设计模式学习总结(七)适配器模式(Adapter)
适配器模式主要是通过适配器来实现接口的统一,如要实现国内手机在国外充电,则需要在不同的国家采用不同的适配器来进行兼容! 一.示例展示: 以下例子主要通过给笔记本电脑添加类似手机打电话和发短信的功能来详 ...
- MySQL主从复制,以及双机热备
MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...
- Python学习 day06
一.== 和 is == 比较的是值 is 比较的是地址 id() -- 返回对象的内存地址 例: 赋值操作是将地址赋给变量 Python 中会实现创建一个小型的整形池,范围为 [-5,25 ...
- jenkins +gitlab 自动化代码秒级上线
一,配置脚本 #!/bin/bash #目标服务器IP地址 host=$ #job名称 job_name=$ #包名 name=web-$(date +)) #打包 cd /var/lib/jenki ...
- 022-pinyin4j工具类模板
模板一 package ${enclosing_package}; import java.util.Arrays; import net.sourceforge.pinyin4j.PinyinHel ...
- 读书笔记-NIO的工作方式
读书笔记-NIO的工作方式 1.BIO是阻塞IO,一旦阻塞线程将失去对CPU的使用权,当前的网络IO有一些解决办法:1)一个客户端对应一个处理线程:2)采用线程池.但也会出问题. 2.NIO的关键类C ...