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共享同一个文件表项。
图3 执行dup之后的内核数据结构
dup2是原子操作,相当于重定向,将第二个文件描述符重定向到第一个文件描述符指向的文件表,并关闭第二个文件描述符之前的文件表项
close(fd)直视关闭了文件描述符
sync刷新所有修改过的块缓冲区
fsync只对文件描述符置顶的文件起作用
fdatasync类似fsync但是只影响文件数据部分,不更新文件属性
fcntl根据参数不同可以:复制一个现有描述符;获得、设置文件描述符标记;获得、设置文件状态标记;获得、设置异步IO所有权;获得、设置记录锁
修改文件描述符标志或者文件状态标志时必须谨慎,要先取得现有标志值,然后根据需要修改它,最后设置新标志值。不能直视执行F_SETFD/f_setfl命令,这样会关闭以前设置的标志位。
评论(0)