dup & dup2
来源:互联网 发布:桌面总是出现精选淘宝 编辑:程序博客网 时间:2024/06/06 03:53
说明:
part.0 :原创
part.1:转载
part.2:转载
part.3:原创
-------------part.0----------------------
int dup(int oldfd);
//创建一个newfd,newfd指向oldfd的位置,并且dup返回的文件描述符总是取系统当前可用的最小整数值
int dup2(int oldfd, intnewfd);
//将已有的一个newfd重定向到oldfd的位置,返回第一个不小于oldfd的整数值
-------------part.1----------------------
链接:http://blog.csdn.net/fucangzxx/article/details/52056215
-------------part.2----------------------
链接:http://blog.csdn.net/kangear/article/details/24098315
代码如下:
- #include <stdio.h>;
- #include <unistd.h>;
- #include <stdlib.h>;
- #include <fcntl.h>;
- #include <sys/types.h>;
- #include <sys/stat.h>;
- #include <string.h>;
- #include <strings.h>;
- int main()
- {
- int sfd = dup(STDOUT_FILENO), testfd;
- printf("sfd = [%d]\n", sfd);
- testfd = open("./temp",O_CREAT | O_RDWR | O_APPEND);
- if (-1 == testfd)
- {
- printf("open file error.\n");
- exit(1);
- }
- /* 重定向 */
- if (-1 == dup2(testfd,STDOUT_FILENO) ) {
- printf("can't redirect fd error\n");
- exit(1);
- }
- /* 此时向stdout写入应该输出到文件 */
- write(STDOUT_FILENO,"file\n",5);
- /* 恢复stdout */
- if (-1 != dup2(sfd,STDOUT_FILENO) ) {
- printf("recover fd ok \n");
- /* 恢复后,写入stdout应该向屏幕输出 */
- write(STDOUT_FILENO,"stdout\n",7);
- }
- printf("gogogogogogo!\n");
- close(testfd);
- }
总结:重定向好似抗战片中的将铁轨移到别的路上,或者走向深谷/dev/null,或者走向想让其走的地方fd。再说下,一开始以为我还以为dup2(STDOUT_FILENO, STDOUT_FILENO);就恢复了呢,结果关闭fd时候,显示关闭成功,但是设备却再也打不开了,因为我并没有真正还原。
-------------part.3----------------------
分析:
第一步: newfd(3)=dup( oldfd(1) ); //newfd > oldfd
第二步:newfd(1)=dup2( oldfd(4), newfd(1) ); //newfd > oldfd
第三部:newfd(1)=dup2( oldfd(3), newfd(1) ); //newfd > oldfd
- dup2()&&dup()
- dup/dup2
- dup、dup2
- dup dup2
- dup,dup2
- dup, dup2
- dup()、dup2()
- dup & dup2
- 理解dup和dup2
- 理解dup和dup2
- dup and dup2
- 理解dup和dup2
- 理解dup和dup2
- dup2和dup
- dup和dup2函数
- 解惑dup、dup2
- 理解dup和dup2
- dup()、dup2()函数
- C语言实现Socket简单通信
- 文件API(篇一)
- quartz在springboot下的简单配置(利用spring获取数据源)
- vim的使用
- cross_val_score交叉验证及其用于参数选择、模型选择、特征选择
- dup & dup2
- caffe HDF5 Data
- 关于智能机器人的一些伦理道德问题
- flask starter: tadpole
- c++中string类的详解
- 《Android学习计划》《第三周》
- noip2017 Day2 T2 宝藏treasure (状压dp)
- Linux下java8安装
- caffe多任务学习之多标签分类