最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年12月29日 08:58:19   投稿:jingxian  
下面小編就為大家?guī)硪黄猯inux中通過文件描述符獲取文件絕對路徑的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在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小于符號連接的內容長度,過長的內容會被截斷。

返回值 執(zhí)行成功則傳符號連接所指的文件路徑字符串,失敗則返回-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中通過文件描述符獲取文件絕對路徑的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Linux 中刪除文本中的回車字符的方法

    Linux 中刪除文本中的回車字符的方法

    當回車字符(Ctrl+M)讓你緊張時,別擔心。有幾種簡單的方法消除它們,感興趣的朋友跟隨腳本之家小編一起看看吧
    2019-09-09
  • Linux下ZooKeeper分布式集群安裝教程

    Linux下ZooKeeper分布式集群安裝教程

    這篇文章主要為大家詳細介紹了Linux下ZooKeeper分布式集群安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • linux No space left on device由索引節(jié)點(inode)爆滿引發(fā)500問題

    linux No space left on device由索引節(jié)點(inode)爆滿引發(fā)500問題

    這篇文章主要介紹了linux No space left on device由索引節(jié)點(inode)爆滿引發(fā)500問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • 解析Linux內核與設備樹的編譯和燒寫

    解析Linux內核與設備樹的編譯和燒寫

    在內核源碼中,存在大量對板級細節(jié)信息描述的代碼。開源文檔中對設備樹的描述是,一種描述硬件資源的數據結構,它通過bootloader將硬件資源傳給內核,使得內核和硬件資源描述相對獨立
    2021-06-06
  • Ubuntu部署python3.5的開發(fā)和運行環(huán)境

    Ubuntu部署python3.5的開發(fā)和運行環(huán)境

    這篇文章主要介紹了Ubuntu部署python3.5的開發(fā)和運行環(huán)境,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • Linux中 find查找命令用法詳解

    Linux中 find查找命令用法詳解

    本篇文章主要介紹了Linux中 find查找命令詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Linux系統(tǒng)交換空間介紹

    Linux系統(tǒng)交換空間介紹

    今天小編就為大家分享一篇關于Linux系統(tǒng)交換空間介紹的文章,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-09-09
  • Linux下安裝Hadoop集群詳細步驟

    Linux下安裝Hadoop集群詳細步驟

    大家好,本篇文章主要講的是Linux下安裝Hadoop集群詳細步驟,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • linux禁止ping的實現實例

    linux禁止ping的實現實例

    這篇文章主要介紹了linux禁止ping的實現實例的相關資料,需要的朋友可以參考下
    2017-05-05
  • 在Linux服務器下啟動tomcat的三種方式

    在Linux服務器下啟動tomcat的三種方式

    這篇文章主要介紹了在Linux服務器下啟動tomcat的三種方式,Linux作為一種穩(wěn)定安全的服務器一直受到業(yè)界歡迎,那么如何啟動部署在服務器上的Tomcat呢,這篇文章帶我們來了解
    2023-03-03

最新評論

三台县| 江永县| 乳山市| 阳西县| 通州市| 高要市| 隆化县| 民乐县| 宜川县| 敦化市| 开平市| 吴旗县| 尚义县| 右玉县| 连云港市| 武功县| 始兴县| 昭觉县| 那坡县| 永善县| 修文县| 聊城市| 北京市| 岳池县| 邵阳市| 麻栗坡县| 玉树县| 萨迦县| 紫云| 怀宁县| 库尔勒市| 深圳市| 锡林浩特市| 琼中| 镇坪县| 富川| 慈利县| 治多县| 慈溪市| 宁城县| 沂源县|