国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Linux服務(wù)器 > 正文

linux中通過文件描述符獲取文件絕對路徑的方法

2024-09-05 23:03:22
字體:
供稿:網(wǎng)友

linux中,有時候我們只知道文件描述符卻不知道它的名字及其完整的路徑,如果我們想獲取其路徑該怎么辦呢?其實很簡單,在linux中每個被打開的文件都會在/proc/self/fd/目錄中有記錄,其中(/proc/self/fd/文件描述符號)的文件就是文件描述符所對應(yīng)的文件。說道這里我們先停下了說一個函數(shù):

readlink(取得符號連接所指的文件)

相關(guān)函數(shù) stat,lstat,symlink

表頭文件 #include <unistd.h>

定義函數(shù) int readlink (const char *path, char *buf, size_t bufsiz);

函數(shù)說明 readlink()會將參數(shù)path的符號連接內(nèi)容存到參數(shù)buf所指的內(nèi)存空間,返回的內(nèi)容不是以NULL作字符串結(jié)尾,但會將字符串的字符數(shù)返回。若參數(shù)bufsiz小于符號連接的內(nèi)容長度,過長的內(nèi)容會被截斷。

返回值 執(zhí)行成功則傳符號連接所指的文件路徑字符串,失敗則返回-1,錯誤代碼存于errno。

錯誤代碼 EACCESS 取文件時被拒絕,權(quán)限不夠

EINVAL 參數(shù)bufsiz 為負(fù)數(shù)
EIO I/O 存取錯誤。
ELOOP 欲打開的文件有過多符號連接問題。
ENAMETOOLONG 參數(shù)path的路徑名稱太長
ENOENT 參數(shù)path所指定的文件不存在
ENOMEM 核心內(nèi)存不足
ENOTDIR 參數(shù)path路徑中的目錄存在但卻非真正的目錄。


綜合上述得出如下簡單函數(shù)來獲取文件路徑:

std::string get_file_name (const int fd){  if (0 >= fd) {    return std::string ();  }  char buf[1024] = {'/0'};  char file_path[PATH_MAX] = {'0'}; // PATH_MAX in limits.h  snprintf(buf, sizeof (buf), "/proc/self/fd/%d", fd);  if (readlink(buf, file_path, sizeof(file_path) - 1) != -1) {    return std::string (file_path);  }  return std::string ();}

以上這篇linux中通過文件描述符獲取文件絕對路徑的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 潼南县| 丹阳市| 开化县| 太白县| 周至县| 佛冈县| 安泽县| 咸丰县| 揭东县| 上栗县| 万源市| 普安县| 宜良县| 上思县| 锦屏县| 嫩江县| 广灵县| 房山区| 敦煌市| 武清区| 高州市| 报价| 临清市| 东城区| 交城县| 萨嘎县| 嘉兴市| 松潘县| 江山市| 石柱| 泰宁县| 黄冈市| 三亚市| 土默特左旗| 肇庆市| 贵德县| 义乌市| 霞浦县| 新兴县| 乐都县| 吉林省|