函数 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++)
我为了好玩而尝试了这个,看看它是否有效,但最终还是无效。
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++)