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

File 函数dup2(int oldfd,int newfd)在for()循环中失败,file,strace,File,Strace,我试着这么做是为了好玩,想看看它是否有效,但最终没有 i = open("something", O_RDWR); for(i ; i<10 ; i++); { if(dup2(i, i+1 ) == -1 ) { printf("Dup failed\n"); exit(1); } } 似乎只执行了最后一次du

我试着这么做是为了好玩,想看看它是否有效,但最终没有

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

    }
似乎只执行了最后一次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)是不是因为“for”循环的“初始化”部分只是“i”;应该用上面的行替换它?(或者用NOOP替换“i;”)你能添加一个不起作用的例子吗?我知道你有这个片段,但是完整的例子会很有帮助。就是这样,我不敢相信我没有注意到!非常感谢!我已经花了两个小时才发现错误!
for(i ; i<10 ; i++);
for(i ; i<10 ; i++)