gpt4 book ai didi

c - dup 返回值始终为零

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:13 26 4
gpt4 key购买 nike

我想知道为什么 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”?!

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

RETURN VALUE On success, these system calls return the new descriptor. On error, -1 is returned, and errno is set appropriately.

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

请帮忙。

最佳答案

错误在你的情况下:

(fdd = dup(fdo) < 0)

变量fdd成为 dup(fdo) < 0 的结果.你需要检查你的括号:

(fdd = dup(fdo)) < 0 

关于c - dup 返回值始终为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16434861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com