Cプログラムで `open()`を介して通常のファイルを開くと、 `/proc/$pid/fd/$number`ファイルが生成されますか?

Cプログラムで `open()`を介して通常のファイルを開くと、 `/proc/$pid/fd/$number`ファイルが生成されますか?

Linuxでは、以下を呼び出すCプログラムを作成しました。open()通常のファイルを開き、ファイル記述子を返します。

Cプログラムでコンパイルされた実行可能ファイルを実行するときは、そのプロセスでファイルを生成するのが正しいですか /proc/$pid/fd/$number

  • $pidプロセスのpidです。
  • $numberopen()Cプログラムから返されたファイル記述子と同じ整数ですか?

Cプログラムで/proc/$pid/fd/$number開かれた一般ファイルへのシンボリックリンクですか?open()

答え1

一度試してみてはいかがでしょうか?

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv) {
  int fd = open("333222.c", 0);
  printf("%d\n", fd);
  sleep(120);
  if (fd >= 0) {
    close(fd);
  }
}

別の名前で保存、333222.cコンパイル、実行します。

gcc -o 333222 333222.c
./333222 &

これにより、pidとファイル記述子が表示されます(3)。前者を使用してファイル記述子をリストします。

ls -l /proc/.../fd

に接続されているファイル記述子3が表示されます333222.c

あなたの質問に答えるために、これは/proc/$pid/fd/$fdpidを使用して実行されているプログラム内のファイル記述子(などから返されます)に対応し、開かれた実際のファイル(まだ存在する場合)へのリンクを実行します。$fd$pidopen(2)

関連情報