【问题标题】:Function dup2(int oldfd, int newfd) fails in for() loop函数 dup2(int oldfd, int newfd) 在 for() 循环中失败
【发布时间】: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 但完整的例子会很有帮助。

标签: file strace


【解决方案1】:

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

【讨论】:

  • 就是这样,我不敢相信我没有注意到它!非常感谢你!我已经敲了两个小时头才发现错误!
【解决方案2】:

你的 for 循环中有错字:

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

应该是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2020-07-30
    • 2018-05-20
    相关资源
    最近更新 更多