0

次のコードの何が問題なのか理解できません。まったく同じアクションを 2 回実行します。初めて機能し、2 番目に失敗します。

  1. FDを開く
  2. 標準入力に複製します。
  3. 標準入力を閉じる
  4. 元の 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
4

1 に答える 1