4.28 UNIX环境高级编程 笔记

时间:2014-04-30 03:43:41   收藏:0   阅读:442

int dup(int filedes);

int dup2(int filedes,int filedes2);

这两个函数都可以实现复制一个现存的文件描述符,但是dup一定返回当前可用最小文件描述符,dup2可以用filedes2参数指定新描述符数值。如果filedes2已经打开,则先将其关闭。如果filedes等于filedes2,则返回filedes2而不关闭。

这些函数返回的新文件描述符与参数参数filesdes共享同一个文件表项。

mamicode.com,码迷

 

图3 执行dup之后的内核数据结构

 dup2是原子操作,相当于重定向,将第二个文件描述符重定向到第一个文件描述符指向的文件表,并关闭第二个文件描述符之前的文件表项

close(fd)直视关闭了文件描述符

 

sync刷新所有修改过的块缓冲区

fsync只对文件描述符置顶的文件起作用

fdatasync类似fsync但是只影响文件数据部分,不更新文件属性

 

fcntl根据参数不同可以:复制一个现有描述符;获得、设置文件描述符标记;获得、设置文件状态标记;获得、设置异步IO所有权;获得、设置记录锁

修改文件描述符标志或者文件状态标志时必须谨慎,要先取得现有标志值,然后根据需要修改它,最后设置新标志值。不能直视执行F_SETFD/f_setfl命令,这样会关闭以前设置的标志位。

 

 

4.28 UNIX环境高级编程 笔记,码迷,mamicode.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!