3.12 文件I/O_dup和dup2函数
来源:互联网 发布:论网络暴力英文 编辑:程序博客网 时间:2024/05/16 05:12
下面两个函数都可用来复制一个现存的文件描述符:
- #include <unistd.h>
- int dup(int filedes);
- int dup2(int filedes, int filedes2);
返回值:成功返回新的文件描述符,出错返回-1
有dup返回的新文件描述符一定是当前可用文件描述符的最小数值。用dup2则可以用filedes2参数指定新描述符的数值。如果filedes2已经打开,则先将其关闭。如若filedes等于filedes2,则dup2返回filedes2,而不关闭它。
这些函数返回的新文件描述符与参数filedes共享同一个文件表项:
图3.3 执行dup(1)后的内核数据结构
每个文件描述符都有它自己的一套文件描述符标志。例如,新描述符的执行时关闭(close-on-exec)标志总是有dup函数清除。
复制一个描述符的另一种方法是使用fcntl函数。实际上,
- 调用dup(filedes); 等效于 fcntl(filedes, F_DUPFD, 0);
- 调用dup2(filedes, filedes2); 等效于 close(filedes2);fcntl(filedes, F_DUPFD, filedes2);
在后一种情况下,dup2并不完全等同于close加上fcntl。它们之间的区别是:
- dup2是一个原子操作,而close及fcntl则包括两个函数调用。有可能在close和fcntl之间插入执行信号捕获函数,它可能修改文件描述符。
- dup2和fcntl有某些不同的errno。
- 3.12 文件I/O_dup和dup2函数
- 文件I/O——dup和dup2函数
- 高级I/O函数之socketpair和dup/dup2
- 3.12 dup2函数-文件描述符复制
- dup和dup2函数
- dup和dup2函数
- dup()和dup2()函数
- dup和dup2函数
- dup()和dup2()函数
- dup()和dup2()函数
- dup和dup2函数
- dup和dup2函数
- dup和dup2函数
- dup和dup2函数
- dup和dup2函数
- dup和dup2函数
- dup和dup2函数
- dup和dup2函数
- Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补[转自Neeao's Blog]
- (转)手把手教你用C#打包应用程序(安装程序)【卸载模块已添加】
- .net 2.0 BackgroundWorker类详细用法(转)
- 把android framework源代码加入SDK进行调试(转)
- Linux Shell 常用命令与目录分区的学习总结
- 3.12 文件I/O_dup和dup2函数
- 创建和触发sql2005视图中的触发器
- 线程与进程的比较
- Rename a Table
- 在Oracle的存储过程中使用dblink调用远程存储过程备忘
- 毕业五年决定你的一生
- C语言的内嵌汇编
- 今天刚正式注册,来报个到。
- 关于店铺选址1