1. 程式人生 > >如何通過開啟檔案的fd值,找到被開啟檔案的全路徑

如何通過開啟檔案的fd值,找到被開啟檔案的全路徑

可在命令列執行: 

ls -l /proc/idno/fd

即可看到相關資訊。

readlink()會將引數path的符號連結內容儲存到引數buf所指的記憶體空間,返回的內容不是以\000作字串結尾,但會將字串的字元數返回,這使得新增\000變得簡單。若引數bufsiz小於符號連線的內容長度,過長的內容會被截斷,如果 readlink 第一個引數指向一個檔案而不是符號連結時,readlink 設 置errno 為 EINVAL 並返回 -1。 readlink()函式組合了open()、read()和close()的所有操作。

通過開啟檔案的fd值,如何找到被開啟檔案檔案的全路徑 fd1 = open(filename, O_RDWR) 我們知道當我們呼叫open的時候,會得到一個fd的檔案描述符。這個檔案描述符是儲存在: /proc/getpid()/fd/fd1,通過這個檔案描述符符,呼叫readlink我們就可以知道開啟檔案的路徑了。 示例程式碼如下:

  1 #

include "all.h"
  2 
  3 #define F_LEN 1024
  4 char filename[F_LEN] = "temp";
  5 
  6 int
  7 main(void)
  8 {
  9    int fd;
 10    char buf[F_LEN];
 11 
 12    if ((fd = open(filename, O_RDWR)) < 0) {
 13       perror("open error");
 14       exit(0);
 15    }
 16    snprintf(filename, F_LEN, "
/proc/%ld/fd/%d"
, (long)getpid(), fd);
 17    if (readlink(filename, buf, F_LEN) < 0) {
 18       perror("readlink() ");
 19       exit(0);
 20    }
 21    printf("In this process fd=%d<->filename=%s\n", fd, buf);
 22 
 23    return OK;
 24 }