【问题标题】:dup return value is always zerodup 返回值始终为零
【发布时间】:2013-05-08 07:19:19
【问题描述】:

我想知道为什么 dup 在下面的代码中总是返回零(其中打开一个文件,而不是连续完成 10 个 dup):

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

void main()
{
        int i,fdo,fdd;

        if((fdo = open("test", O_RDWR | O_CREAT, 0666)) < 0)
        {
                        perror("main open");
                        return;
        }

        printf("main open: %d\n",fdo);


        for(i=0; i< 10;i++)
        {
                if((fdd = dup(fdo) < 0 )) {
                        perror("dup");
                        return ;
                }
                printf("opened %d, duped: %d \n", fdo,fdd);

        }

}

当我运行程序时(在 linux 2.6.32-279.19.1.el6.i686、Netbsd 或 Solaris 5.9 上) ,我得到以下结果:

main open: 3
opened 3, duped: 0 
opened 3, duped: 0 
opened 3, duped: 0 
opened 3, duped: 0 
opened 3, duped: 0 
opened 3, duped: 0 
opened 3, duped: 0 
opened 3, duped: 0 
opened 3, duped: 0 
opened 3, duped: 0 

dup的返回值总是“0”?!

虽然手册页声明返回值应该是文件描述符:

返回值 成功后,这些系统调用会返回新的描述符。出错时,返回 -1,并适当设置 errno。

我不明白为什么我总是得到“0”,因为我知道我没有使用 close 操作。

请帮忙。

【问题讨论】:

  • +1 用于阅读手册页。

标签: c file posix dup


【解决方案1】:

错误在于你的情况:

(fdd = dup(fdo) < 0)

变量fdd 成为dup(fdo) &lt; 0 的结果。您需要检查括号:

(fdd = dup(fdo)) < 0 

【讨论】:

    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多