linux c 通過檔案描寫敘述符獲取檔名稱

2021-09-07 05:10:49 字數 1200 閱讀 2875

在linux中每乙個被開啟的檔案都會在/proc/self/fd/資料夾中有記錄,當中(/proc/self/fd/檔案描寫敘述符號;這個檔案是符號檔案)的檔案就是檔案描寫敘述符所相應的檔案。

而readlink能夠取得符號連線所指的檔案

函式原型:

ssize_t readlink(const

char *path, char *buf, size_t bufsiz);

函式說明:

readlink()會將引數path的符號連線內容存到引數buf所指的記憶體空間。返回的內容不是以null作字串結尾,但會將字串的字元數返回。若引數bufsiz小於符號連線的內容長度,過長的內容會被截斷。
返回值 執行成功則傳符號連線所指的檔案路徑字串,失敗則返回-1,錯誤**存於errno。 錯誤** eaccess 取檔案時被拒絕。許可權不夠 einval 引數bufsiz 為負數 eio i/o 訪問錯誤。 eloop 欲開啟的檔案有過多符號連線問題。

enametoolong 引數path的路徑名稱太長 enoent 引數path所指定的檔案不存在 enomem 核心記憶體不足 enotdir 引數path路徑中的資料夾存在但卻非真正的資料夾。

通過檔案描寫敘述符獲取檔名稱源**:

#include 

#include

#include

#include

#include

const

char *file_name = "a.txt";

int main()

char buf[1024] = ;

char file_path[1024] = ;

snprintf(buf,sizeof(buf), "/proc/self/fd/%d", fd);

readlink(buf,file_path,sizeof(file_path)-1);

printf("%s\n",file_path);

return

0;}

linux C複習 檔案操作(檔案描述符的複製)

檔案描述符的複製函式dup dup2 函式原型 include 標頭檔案 int dup int oldfd 複製乙個檔案描述符,並返回新的檔案描述符,失敗返回 1 int dup2 int oldfd,int newfd 指定乙個新的檔案描述符,成功返回新的檔案描述符,失敗返回 1 說明 檔案描述...

續 linux C語言 檔案描述符 讀寫位址分析

記錄日期 2014 10 23 20 08 日子背景 前些天在整理 智慧型相機人數統計 資料的儲存問題,由於對fopen開啟方式的形式不是很了解,導致讀寫檔案時一直異常,浪費了很多寶貴的時間,為了避免相同的朋友走同樣的彎路,同時也警示自己不要犯同樣的錯誤,特此記錄,望對有需求的您有所幫助。我在操作檔...

linux中通過檔案描述符獲取檔案絕對路徑

linux中通過檔案描述符獲取檔案絕對路徑 在linux中,有時候我們只知道檔案描述符卻不知道它的名字及其完整的路徑,如果我們想獲取其路徑該怎麼辦呢?其實很簡單,在linux中每個被開啟的檔案都會在 proc self fd 目錄中有記錄,其中 proc self fd 檔案描述符號 的檔案就是檔案...