LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 953|回复: 1

Qmail 里面的 一段程序的问题

[复制链接]
发表于 2007-10-31 11:43:36 | 显示全部楼层 |阅读模式
这里是一个函数的定义

int       fd_copy(to,from)   
int       to;   
int       from;   
{   
        if       (to       ==       from)       return       0;   
        if       (fcntl(from,F_GETFL,0)       ==       -1)       return       -1;   
        close(to);   
        if       (fcntl(from,F_DUPFD,to)       ==       -1)       return       -1;   
        return       0;   
}   
--------------------------------------------------------------------
下面是函数的调用,但是小弟不明白,fd_copy(2,0)是什么意思?下面的这段代码实现了什么功能?

    if   (fd_copy(2,0)   ==   -1)   die();
    if   (fd_copy(3,0)   ==   -1)   die();
    if   (fd_copy(4,0)   ==   -1)   die();
    if   (fd_copy(5,0)   ==   -1)   die();
    if   (fd_copy(6,0)   ==   -1)   die();
发表于 2007-10-31 14:05:23 | 显示全部楼层
这里似乎跟dup2(from, to)是一样的,但是fcntl的F_DUPFD复制到的目标文件描述符不一定等于(大于或等于)to所指定的文件描述符,不过他在这里先关闭掉之前的to在调用F_DUPFD来保证跟dup2(from, to)的功能一样。
一个问题:这样作保险吗?close后如果其他的一个县城再打开一个文件把这个文件描述符占用的了话,这个代码就出问题了,为什么不直接使用dup2呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表