您的位置:首页 > 编程语言

4.28 UNIX环境高级编程 笔记

2014-04-28 10:58 190 查看
int dup(int filedes);

int dup2(int filedes,int filedes2);

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

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



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

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

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

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

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

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

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

修改文件描述符标志或者文件状态标志时必须谨慎,要先取得现有标志值,然后根据需要修改它,最后设置新标志值。不能直视执行F_SETFD/f_setfl命令,这样会关闭以前设置的标志位。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: