在linux中每一个被打开的文件都会在/proc/self/fd/文件夹中有记录,当中(/proc/self/fd/文件描写叙述符号;这个文件是符号文件)的文件就是文件描写叙述符所相应的文件。



而readlink能够取得符号连接所指的文件

函数原型:

ssize_t 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路径中的文件夹存在但却非真正的文件夹。

通过文件描写叙述符获取文件名称源代码:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h> const char *FILE_NAME = "a.txt"; int main(){
int fd;
if((fd = open(FILE_NAME, O_RDONLY)) == -1){
fprintf(stderr,"%s open :%s\n",FLOW_RX_FILE, strerror(errno));
return -1;
} char buf[1024] = {'\0'};
char file_path[1024] = {'\0'};
snprintf(buf,sizeof(buf), "/proc/self/fd/%d", fd);
readlink(buf,file_path,sizeof(file_path)-1); printf("%s\n",file_path); return 0;
}

linux c 通过文件描写叙述符获取文件名称的更多相关文章

  1. 每天进步一点点——Linux中的文件描写叙述符与打开文件之间的关系

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆能够看成是文件,文件又可分为:普通 ...

  2. Linux 文件描写叙述符设置为非堵塞的方法

    通过fcntl设置文件描写叙述符属性 fcntl即F_SETFL,F_GETFL的使用,设置文件的flags,堵塞设置成非堵塞,非堵塞设置成堵塞(这连个在server开发中能够封装为基本函数) 1.获 ...

  3. Shell下的通配符、特殊符号和文件描写叙述符

    一:通配符 * 代表『 0 个到无穷多个』随意字符 演示样例:找出 /etc/ 底下以 cron 为开头的文件名称的文件 [root@instructor Desktop]# ls /etc/cron ...

  4. 进程与进程描写叙述符(task_struct)

    一. 进程 进程(Process) 计算机中的程序关于某数据集合上的一次执行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体: ...

  5. openssl之BIO系列之12---文件描写叙述符(fd)类型BIO

    文件描写叙述符(fd)类型BIO ---依据openssl doc\crypto\bio_s_fd.pod翻译和自己的理解写成 (作者:DragonKing Mailwzhah@263.net 公布于 ...

  6. 【c++】虚函数描写叙述符override

    在C++11中为了帮助程序猿写继承结构复杂的类型,引入了虚函数描写叙述符override,假设派生类在虚函数声明时使用了override描写叙述符,那么该函数必须重载其基类中的同名函数,否则代码将无法 ...

  7. Python描写叙述符(descriptor)解密

    Python中包括了很多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...

  8. 背水一战 Windows 10 (86) - 文件系统: 获取文件夹的属性, 获取文件夹的缩略图

    [源码下载] 背水一战 Windows 10 (86) - 文件系统: 获取文件夹的属性, 获取文件夹的缩略图 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获取文件夹的属性 ...

  9. php 获取文件下的所有文件。php 获取文件下的所有子文件。php 递归获取文件下的所有文件。封装好的方法

    //php 获取文件下的所有文件.php 获取文件下的所有子文件.php 递归获取文件下的所有文件.直接上封装好的php代码 <?php //文件路径 $dir = dirname(__FILE ...

随机推荐

  1. asp.net mvc 注册中的邮箱激活功能实现(二)

    邮件发送功能封装 /// <summary>        /// 发送注册邮件        /// </summary>        /// <param name ...

  2. C++设计模式之装饰者模式

    #include "HandCake.h" //手抓饼 HandCake::HandCake() { ; this->name="手抓饼"; } Hand ...

  3. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(二)

    这篇文章的理解,需要一些专业知识了. 我们可以创建模拟自己的外设吗? 我们已经知道什么是qemu了,我们可以通过qmeu的提供的外设,DIY一个计算机了. 但是我们可能还不满足,我们可以自己制造一个外 ...

  4. 截取字符串一之slice

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 自定义标签体、MVC

    自定义标签 文件以tld结尾,放在webinfo中 标签名 引用类 标签体 继承SimpleTagSupport,复写doTag() getContext(); getjspBody()   invo ...

  6. NYOJ 7-街区最短路径问题(曼哈顿距离)

    街区最短路径问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 一个街区有很多住户,街区的街道只能为东西.南北两种方向. 住户只可以沿着街道行走. 各个街道之间的间 ...

  7. frameset常用属性

    框架是网页画面分成几个框窗(不同的窗口对应不同页面以几个网页的形式显示),同时取得多个 src的地址.页面所有框架标记需要放在一个总起的 html 档,这个档案只记录了该框架如何分割 ,不会显示任何资 ...

  8. 同一TextView上内容的不同显示

    首先请原谅我不会给文章起名字. . .不能准确的表达出究竟要讲什么,真实智商捉急. 直接上图 如图所看到的显示的是两个textview 第一个实现的是,在同一个textview中给不同内容赋予不同的颜 ...

  9. 解决.net中截取字符串的汉字与数字还有静态扩展方法

      转载 http://blog.163.com/cn_dreamgo/blog/static/52679452200961033212407/ 这两天在C#编程中应用到C#代码与C的代码信息交互,但 ...

  10. JQ工具函数运用

    1.把对象转换为字符串 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <he ...