【发布时间】:2015-06-09 15:13:22
【问题描述】:
我尝试这个是为了好玩,看看它是否有效,但最终还是无效。
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
dup 在 for 循环中失败的原因是什么?有没有我遗漏的错误?
【问题讨论】:
-
可能是因为“for”循环的“初始化”部分只是“i;”它应该在哪里被上面的行替换? (或者只是用 NOOP 替换 'i;')
-
你能添加一个最小的非工作示例吗?我看到你有 sn-p 但完整的例子会很有帮助。