• linux中通过文件描述符获取文件绝对路径  转载请说明出处:http://blog.csdn.net/cywosp/article/details/9147467  在linux中,有时候我们只知道文件描述符却不知道它的名字及其完整的路径,如果我们想获取其...
    linux中通过文件描述符获取文件绝对路径
        转载请说明出处:http://blog.csdn.net/cywosp/article/details/9147467
        在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 文件描述符详解 2018-03-29 17:31:37
    要了解Linux下的文件IO,我们首先要清楚文件描述符的概念,那什么是文件描述符呢?接下来我们一起认识一下: 首先我们知道操作系统是一个“纯正”的搞管理的软件,它对硬件的管理方式是先描述起来,再组织起来;...
  • 如果你创建了新的输入或输出文件描述符,shell会在脚本退出时自动关闭它们。然而在有些情况下,你需要在脚本结束前手动关闭文件描述符。 要关闭文件描述符,将它重定向到特殊符号&amp;- 举例如下: [root@...
  • 一个 Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Linux 会给每个文件分配一个编号(一个 ID),这个编号就是一个整数,被称为文件描述符(File Descriptor)。这只是一个形象的比喻,为了让...
  • 一、文件描述符(fd)我们都知道在Linux下一切皆文件。当然设备也不例外,如果要对某个设备进行操作,就不得不打开此设备文件,打开文件就会获得该文件的文件描述符fd( file discriptor), 它就是一个很小的整数,每...
  • linux基础-文件描述 2018-10-25 16:32:25
    文件描述符简介 文件描述符(file descriptor)通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。 每个进程在PCB...
  • 就像windows中的句柄一样,学习linux经常会碰到文件描述符,我们都知道文件描述符是一个非负整数,每一个文件描述符都唯一对应了一个打开的文件,那么文件描述符在内核中到底是以什么形式存在的呢? 这个问...
  •  在linux环境下,任何事物都以文件的形式存在,通过文件不...如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本
  • 快速理解文件描述符与进程打开文件之间的关系
  • 1、文件描述符总量与使用量 cat /proc/sys/fs/file-nr #第一列:为已分配的FD数量 #第二列:为已分配但尚未使用的FD数量 #第三列:为系统可用的最大FD数量 2、获取进程打开的文件描述符 ll /proc/3253/fd #统计...
  • 文件描述符的有效范围是 0 到 OPEN_MAX。Linux 2.4.22 强制规定最多不能超过 1,048,576 。  文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件...
  • 系统最大打开文件描述符数: /proc/sys/fs/file-max  2.查看:  $ cat /proc/sys/fs/file-max  3.重新设置:  ①临时性: $ echo 1000000 &gt; /pro/sys/fs/file-max  ②永久性:在配置文件/etc/sysct...
  • dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件。这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个...
  • 最近调程序遇到一个问题,就是程序跑起来以后,打开的文件描述符数一直增长,也不知道是哪里没有关闭,好在,linux上可以直接查看每个进程打开的所有文件描述符~ 首先,每个进程开启,linux系统都会为其创建一个...
  • 每个进程在进程控制块(PCB)中都保存着一份文件描述符表,文件描述符即是这个表的索引,每个表项都指向一个已打开文件,即上图的 file 结构体。 file 结构体中维护着文件状态标志以及读写指针,所以说即使不同的...
  • linux文件描述符限制和单机最大长连接数相关参数linux系统中与文件描述符相关的参数有以下几个: soft/hard nofile file-max(/proc/sys/fs/file-max) nr_open(/proc/sys/fs/nr_open) 这三个参数的作用都是限制一...
  • Linux文件搜索、查找、查看命令 1、最强大的搜索命令:find 一、根据 文件或目录名称 搜索 二、根据 文件大小 搜索 三、根据 所有者和所属组 搜索 四、根据 时间属性 搜索 五、根据 文件类型或i节点 搜索 六、组合...
  • 系统最大打开文件描述符数:/proc/sys/fs/file-max 查看 $ cat/proc/sys/fs/file-max 186405 设置 # echo 1000000 >/proc/sys/fs/file-max   进程最大打开文件描述符数:user limit中nofile的soft limit ...
  • Linux中查看与设置文件描述符的方法(图文) 发布时间:2013-07-01编辑:脚本学堂 本文介绍下,在linux系统中,查看当前文件描述符,以及如何设置文件描述符的方法,有需要的朋友,可以参考下。 ...
  • Linux系统文件描述符理解 2015-08-31 11:01:08
    以下是查看Linux文件描述符的三种方式:[root@localhost ~]# sysctl -a | grep -i file-max --colorfs.file-max = 392036[root@localhost ~]# cat /proc/sys/fs/file-max392036[root@localhost ~]# ulimit -n1024
1 2 3 4 5 ... 20
收藏数 441,696
精华内容 176,678