Linux,プログラムが使用しているファイルディスクリプタを確認

スポンサーリンク

鍛錬 335

Linux,プログラムが使用しているファイルディスクリプタを確認する

プログラムが使用しているファイルディスクリプタを確認するには、/proc ディレクトリ配下を確認します。
 
確認方法は、以下に示す通りです。

ls -l /proc/プロセスid/fd
スポンサーリンク

プログラム

以下は、サンプルファイル (/var/tmp/sample.txt) をオープン後に 60 秒間 sleep するプログラム、sample.c です。

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

// main
int main(void)
{
	char filename[256] = "";
	int fd;
	int ret;
	
	strncpy(filename, "/var/tmp/sample.txt", sizeof(filename) - 1);
	if ((fd = open(filename, O_RDONLY)) == -1) {
		perror("open");
		exit(EXIT_FAILURE);
	}
	
	printf("fd = %d\n", fd);
	
	sleep(60);
	
	if ((ret = close(fd)) == -1) {
		perror("close");
		exit(EXIT_FAILURE);
	}
	
	return 0;
}
スポンサーリンク

実行結果

以下は、プログラム sample.c が使用しているファイルディスクリプタを、次の順序で確認しています。

  1. sample.c をバックグラウンドで実行
  2. sapmle.c の pid を確認
  3. sample.c が使用しているファイルディスクリプタを確認
***@ubuntu:/var/tmp$ 
***@ubuntu:/var/tmp$ gcc -Wall -Wextra sample.c -o sample
***@ubuntu:/var/tmp$ ./sample &
[1] 1901
***@ubuntu:/var/tmp$ fd = 3

***@ubuntu:/var/tmp$ ls -l /proc/1901/fd
合計 0
lrwx------ 1 *** *** 64 Nov 26 22:31 0 -> /dev/pts/0
lrwx------ 1 *** *** 64 Nov 26 22:31 1 -> /dev/pts/0
lrwx------ 1 *** *** 64 Nov 26 22:31 2 -> /dev/pts/0
lr-x------ 1 *** *** 64 Nov 26 22:31 3 -> /var/tmp/sample.txt

 
上記に示した通り、プログラム sample.c が使用しているファイルディスクリプタを、ls コマンドを使用して確認することができました。

タイトルとURLをコピーしました