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

Function dup2(int oldfd, int newfd) fails in for() loop

我为了好玩而尝试了这个,看看它是否有效,但最终还是无效。

    i = open("something", O_RDWR);
    for(i ; i<10 ; i++);
    {
            if(dup2(i, i+1 ) == -1 )
            {
                  printf("Dup failed\n");
                  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);

strace 的输出:

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

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

这是第 2 行中的虚假终止 ; - 将其删除!你的循环将 运行 直到 10 什么都不做(最后的分号表示空语句),然后大括号中的命令执行一次。

你的 for 循环中有错别字:

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

应该是

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