次のコードの何が問題なのか理解できません。まったく同じアクションを 2 回実行します。初めて機能し、2 番目に失敗します。
- FDを開く
- 標準入力に複製します。
- 標準入力を閉じる
- 元の fd を閉じる
ステージ 4 で 2 回目にエラーが発生しました。これは、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