麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 服務器 > Linux服務器 > 正文

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

2024-09-05 23:03:22
字體:
來源:轉載
供稿:網友

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

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

相關函數 stat,lstat,symlink

表頭文件 #include <unistd.h>

定義函數 int 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路徑中的目錄存在但卻非真正的目錄。


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

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中通過文件描述符獲取文件絕對路徑的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 99精品视频免费看 | www.91tv| 新久草视频 | 国产91在线亚洲 | 国产精品自在线拍 | 天天干天天碰 | 国产成人精品二区 | 国产噜噜噜噜噜久久久久久久久 | 久久久日韩av免费观看下载 | 中文字幕一二区 | 87成人免费看片 | 麻豆一二区 | 人人玩人人爽 | 美国黄色毛片女人性生活片 | 在线视频 欧美日韩 | 激情五月少妇a | 欧美在线观看视频网站 | hdbbwsexvideo| 国产一区二区三区欧美 | 精品xxxx户外露出视频 | 成人精品久久 | 国语自产免费精品视频在 | 黑人一区二区 | 亚洲免费观看视频 | 久久精品欧美一区二区三区不卡 | 国产亚洲精品久久 | 欧美精品18videos性欧美 | 日韩视频一区二区三区四区 | 毛片视频免费播放 | av资源在线天堂 | 久草在线观看福利视频 | www.99热精品 | 久草在线免费资源站 | 369看片你懂的小视频在线观看 | 在线a亚洲视频播放在线观看 | 特一级毛片 | 天堂精品久久 | 久夜草| 艹男人的日日夜夜 | 久久激情小视频 | www国产成人免费观看视频 |