我无法理解以下代码有什么问题。我两次执行完全相同的动作。它第一次工作,第二次失败。
- 打开FD
- 复制到标准输入。
- 关闭标准输入
- 关闭原始fd
第二次出现错误,在第 4 阶段,这意味着 FD 已经关闭。
int fd =open("/path/to/some/file",0,"r");
if (dup2(fd,STDIN_FILENO)<0)
perror("dup_in");
if (close(STDIN_FILENO)<0)
perror("close_in");
if (close(fd)<0)
perror("close_fd");
//Up to here it works fine.
fd =open("/path/to/some/file",0,"r");
if (dup2(fd,STDIN_FILENO)<0)
perror("dup_in2");
if (close(STDIN_FILENO)<0)
perror("close_in2");
if (close(fd)<0) //<-- ERROR!
perror("close_fd2"); //<--close_fd2: Bad file descriptor