激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統 - Linux - linux中通過文件描述符獲取文件絕對路徑的方法

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

2021-12-15 16:26Linux教程網 Linux

下面小編就為大家帶來一篇linux中通過文件描述符獲取文件絕對路徑的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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


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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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中通過文件描述符獲取文件絕對路徑的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 特一级毛片| 亚洲一区二区免费视频 | 中文字幕线观看 | 国产精品视频在线免费观看 | 久久国产成人午夜av浪潮 | 色污视频在线观看 | 91精品久久久久久久久网影视 | 毛片福利 | 成人在线视频免费播放 | 久久久成人一区二区免费影院 | 亚洲精品动漫在线观看 | 国产又白又嫩又紧又爽18p | 毛片大全| 成人短视频在线播放 | 欧美极品欧美精品欧美视频 | 精品黑人一区二区三区国语馆 | 欧美日韩亚洲一区二区三区 | 日韩三级伦理在线观看 | 成人在线观看一区二区三区 | 久久免费看片 | 精国品产一区二区三区有限公司 | 精品成人av一区二区三区 | 日日狠狠久久偷偷四色综合免费 | 欧美特一级 | 老司机免费福利午夜入口ae58 | 欧美福利视频一区二区 | 水卜樱一区二区av | 国产激情视频在线 | 1314成人网 | 久久久婷婷一区二区三区不卡 | av在线网站观看 | 日本看片一区二区三区高清 | 成人在线97 | 欧美一级片免费在线观看 | 中文字幕xxx | 久草视频福利在线观看 | 国产精品麻豆91 | 久久国产精品二国产精品中国洋人 | 国产精品一区2区3区 | 黄色一级片免费观看 | 国产在线欧美日韩 |