dup/dup2
2016-05-25 23:04
295 查看
dup函数复制oldfd描述符给一个新的描述符,即这个新的文件描述符指向oldfd所拥有的文件表项。这个新的描述符是未被使用的最小的描述符,dup函数返回这个描述符
dup2函数和dup函数类似,它们的区别就是dup2可以用newfd参数指定新的描述符,如果newfd描述符已经打开,则覆盖;如果newfd等于oldfd,则dup2直接返回newfd.
这两个函数返回的新文件描述符和参数oldfd描述符共享同一文件表项
函数原型:
#include<unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
可以这么简单的记忆,这两个函数都使newfd(dup中是返回值)所指向的文件和oldfd所指向的文件一样
下面两个程序都使输出重定向到log文件中
dup
![](http://s3.51cto.com/wyfs02/M01/80/F8/wKiom1dFeVWiSv3OAAAMB6i5ErA998.png)
dup2
《完》
dup2函数和dup函数类似,它们的区别就是dup2可以用newfd参数指定新的描述符,如果newfd描述符已经打开,则覆盖;如果newfd等于oldfd,则dup2直接返回newfd.
这两个函数返回的新文件描述符和参数oldfd描述符共享同一文件表项
函数原型:
#include<unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
可以这么简单的记忆,这两个函数都使newfd(dup中是返回值)所指向的文件和oldfd所指向的文件一样
下面两个程序都使输出重定向到log文件中
dup
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main() { umask(0); ssize_t fd=open("./log",O_CREAT|O_WRONLY,0644); //关闭标准输出 close(1); ssize_t newfd=dup(fd); close(fd); int count=0; while(count++<10){ printf("hello\n"); } fflush(stdout); close(1); return 0; }运行结果会在当前目录下生成一个log文件,并在log文件里写入10条hello如下图:
![](http://s3.51cto.com/wyfs02/M01/80/F8/wKiom1dFeVWiSv3OAAAMB6i5ErA998.png)
dup2
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main() { umask(0); ssize_t fd=open("./log",O_CREAT|O_WRONLY,0644); //关闭标准输出 close(1); //把标准输出重定向到fd所表示的文件中 dup2(fd,1); close(fd); int count=0; while(count++<10){ printf("hello\n"); } fflush(stdout); close(1); return 0; }运行结果和上个程序结果相同
《完》
相关文章推荐
- UNIX之dup2()——笔记
- Ping时产生的dup
- linux dup,dup2,dup3 复制一个文件描述符
- 自己实现的dup2函数
- unix下管道编程
- 自编shell命令解释器
- 文件描述符总结
- APUE-文件与目录:dup与dup2
- dup2
- 协同进程
- linux dup/dup2
- 14----基于socket文件的IPC
- 15--linux 网络编程基础
- 19---- Socket options
- VMware虚拟机ping出现DUP!
- dup、dup2、fcntl
- [Ruby笔记]13.Ruby object .replace("") .dup .freeze
- dup/dup2输出重定向
- dup和dup2详解
- linux常用文件I/O操作之文件共享的实现方式