ファイルデスクリプタから逆にファイルパスを得る
こんなのしか思いつかなかった。
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <assert.h> #define VERIFY(x) if (!(x)) { assert(x); abort(); } int main(int argc, char *argv[]) { pid_t pid = 0; int fd = 0; char proc_path[1024]; char path[1024]; VERIFY(argc == 2); fd = open(argv[1], O_RDONLY); pid = getpid(); sprintf(proc_path, "/proc/%d/fd/%d", (int)pid, fd); int size = readlink(proc_path, path, 1024); VERIFY(size > 0); path[size] = 0; // for null-termination printf("fd = %d, path = %s\n", fd, path); return 0; }
実行例
$ ./a.out main.c fd = 3, path = /home/admin/fd_to_path/main.c