函数dup2(int oldfd, int newfd)在for()循环中失败



我试了一下,看看它是否有效,但最终没有。

    i = open("something", O_RDWR);
    for(i ; i<10 ; i++);
    {
            if(dup2(i, i+1 ) == -1 )
            {
                  printf("Dup failedn");
                  exit(1);
            }
    }

我对可执行文件进行了格式化,输出如下:

open("something", O_RDWR)                   = 3
dup2(10, 11)                  = -1 EBADF (Bad file descriptor)

好像只执行了最后一次dup操作!

有趣的是,当我不使用循环时,它可以完美地工作:

i = open("something", O_RDWR);
dup2(i,i+1);
i++;
dup2(i,i+1);
i++;
dup2(i,i+1);
i++;
dup2(i,i+1);
i++;
dup2(i,++i);

字符输出:

open(".ping", O_RDWR)                   = 3
dup2(3, 4)                              = 4
dup2(4, 5)                              = 5
dup2(5, 6)                              = 6
dup2(6, 7)                              = 7
dup2(7, 8)                              = 8

dup在for循环中失败的原因是什么?有什么我遗漏的错误吗?

这是假的终止;在line2 -删除它!循环将一直运行到10点,而不执行任何操作(最后的分号表示空语句),然后用大括号括起来的命令执行一次。

你的for循环中有一个打字错误:

for(i ; i<10 ; i++);

应为

for(i ; i<10 ; i++)

相关内容

  • 没有找到相关文章

最新更新