用于存储目录中的文件信息(文件名、扩展名等等)

struct dirent {
ino_t d_ino;    /* inode number 索引节点号 */
off_t d_off;    /* offset to this dirent 在目录文件中的偏移 */
unsigned short d_reclen;   /* length of this d_name 文件名长 */
unsigned char d_type;  /* the type of d_name 文件类型 */
char d_name[256];     /* file name (null-terminated) 文件名,最长255字符 */
};

Unix环境高级编程_1.4 文件与目录
 
 

文件条目
头文件 : dirent.h
/usr/include/dirent.h

结构:DIR directory stream 该结构用于定义路径
包括:ino_t d_ino 文件编号在<sys/types.h>中定义 
char d_name[] 文件条目 文件名长度不应该超过NAME_MAX
NAME_MAX 在limits.h中定义为: #define NAME_MAX 255

函数: 
int closedir(DIR *dir) // 关闭赋给dir的路径, 在此之后directory streamdir就不可用了 
// 0 成功, -1出错
DIR *opendir(const char *);
struct dirent *readdir(DIR *dir); // 返回指向dirent结构的指针
// 当读到最后一个文件,返回NULL

int readdir_r(DIR *restrict, struct dirent *restrict,
struct dirent **restrict);
void rewinddir(DIR *);
void seekdir(DIR *, long);
long telldir(DIR *);

结构:
struct dirent {
ino_t d_ino;
off_t d_off;
unsigned short d_reclen;
unsigned char d_type;
char d_name[256];
};

例子:
DIR *dp;
struct dirent *dirp;

if((dp = opendir(argv[1])) == NULL)
err_sys("can't open %s", argv[1]);

while((dirp = readdir(dp)) != NULL) // 读取dp下所有的dirent结构
printf("%s\n", dirp->d_name);

closedir(dp);

头文件 stdarg.h
void va_start(va_list ap, last);
type va_arg(va_list ap, type); // 获取va_list中对应类型的参数
void va_end(va_list ap); // 当调用va_end后,ap就变成未定义
void va_copy(va_list dest, va_list src); // va_list aq;
// va_copy(aq, ap);
// ...
// va_end(aq);

在stdarg.h中定义va_list主要用于对于调用函数来说,不知道要传入多少个参数和相应类型。
必须先申明一个va_list对象类型,然后使用va_start(), va_arg(), 和 va_end()宏

例子:
56
58 void err_quit(const char *fmt, ...)
59 {
60 va_list ap;
61 va_start(ap, fmt); 
62 err_doit(0, fmt, ap);
63 va_end(ap);
64 exit(1);
65 }

出错处理
头文件 errno.h
在errno.h中定义整形变量errno,被系统用来调用出错事件。

头文件 string.h
strerror, strerror_r 用字符串来描述错误号

头文件 stdio.h
int fflush(FILE *stream); # 强制清空stream的缓冲区
# fflush(stdout)清空stdout的缓冲区了
stdin, stdout, stderr - 标准的IO流
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;

int fputc(int c, FILE *stream); # 向stream流写一个字符
int fputs(const char *s, FILE *stream); #向stream流写字符串,不包括'\0'
int putc(int c, FILE *stream); # 向stream流写一字符,等同于fputc
int putchar(int c); # 等同于putc(c, stdout)
int puts(const char *s); # 向stdout输入字符串和回行符(newline)

例:
67
69 static void err_doit(int errnoflag, const char *fmt, va_listap)
70 {
71 int errno_save;
72 char buf[MAXLINE];
73 
74 errno_save = errno;
75 vsprintf(buf, fmt, ap);
76 if (errnoflag)
77 sprintf(buf + strlen(buf), ": %s", strerror(errno_save));
78 strcat(buf, "\n");
79 fflush(stdout);
80 fputs(buf, stderr);
81 fflush(NULL);
82 return;
83 }

工作目录
头文件unisdt.h
int chdir(const char *path); // 修改当前的工作目录
int fchdir(int fd); //

struct dirent相关推荐

  1. 关于readdir返回值中struct dirent.d_type的取值有关问题(转)

    关于readdir返回值中struct dirent.d_type的取值问题 原网页链接 http://www.gnu.org/software/libc/manual/html_node/Direc ...

  2. Linux下DIR,dirent,stat等结构体详解(转)

    最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...

  3. 结构体DIR和dirent

    1.存储目录中的文件信息(文件名.扩展名等等)#include <dirent.h> struct dirent{   long d_ino; /* inode number 索引节点号 ...

  4. linux中DIR、dirent、opendir()、readdir()、closedir()函数的使用

    一. 1.DIR 属性:数据类型: 头文件:#include <dirent.h> 用法:定义一个指向文件目录的指针: 举例:DIR *dirpt =null; 2.dirent 属性:数 ...

  5. VS2103没有“dirent.h”文件

    文章目录 1 问题描述 2 原因 3 解决办法 4 具体步骤 5 参考链接 1 问题描述 在VS2013中使用dirent.h文件时,找不到该文件. 错误描述: 无法打开包括文件"diren ...

  6. Linux下DIR,dirent,stat等结构体详解

    最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...

  7. UNIX 环境高级编程(四)—— dirent.h

    dirent.h 是 POSIX.1 标准定义的 unix 类目录操作的头文件,包含了许多 UNIX 系统服务的函数原型,例如 opendir 函数.readdir 函数. 1. 基本函数接口 1.1 ...

  8. dirent C语言获取返回第n个文件的全路径

    函数: #include <stdio.h> #include <dirent.h> #include <string.h>char *getPhotoName(i ...

  9. dirent d_type类型

    dirent d_type类型 struct dirent { #ifndef __USE_FILE_OFFSET64 __ino_t d_ino; __off_t d_off; #else __in ...

  10. DIR、dirent、stat结构体详解(转)

    DIR关于目录信息的数据结构,定义如下: struct __dirstream{void *__fd;char *__data;int __entry_data;char *__ptr;int __e ...

最新文章

  1. TCP、IP协议族之数字签名与HTTPS详解
  2. all index range ref eq_ref const system 索引type说明
  3. NFS无法启动根文件系统的解决
  4. 原来你是这样的Promise
  5. messagehub讲解_艾舜杰SAP Data Hub 数据服务总线技术深度讲解
  6. php js鼠标滚动刷新,利用php和js实现页面数据刷新
  7. 使用正态分布变换(Normal Distributions Transform)进行点云配准
  8. iOS点击获取短信验证码按钮
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的在线问卷答题系统
  10. python构造http请求_Python实现简单的HTTP请求发送详解
  11. 电子助力方向机控制模块_【技师投稿】使用道通MS908PRO更换宝马F20底盘方向机...
  12. SharePoint 2007:该表单无法显示,因为会话状态不可用。
  13. Java-json系列(一):用GSON解析Json格式数据
  14. P2016 战略游戏[树形dp]
  15. java final域_【Java】final 域的内存语义
  16. 常用方法总结--文件操作篇
  17. Python 轻松操作Excel,实现自动化办公
  18. 电脑出现蓝屏后自动重启是什么原因
  19. OSINT + Python = Custom Hacking
  20. 搭建 Cobbler 无人值守安装服务器

热门文章

  1. 智能配电房综合监控系统 建设成效
  2. 计算机桌面维护介绍,电脑桌面基础知识介绍
  3. 3.4、云计算FusionAccess桌面运维与管理
  4. 记一次wwwscan目录扫描后获取敏感目录登录后台
  5. 增量式PID计算公式4个疑问与理解
  6. 辰视携最新3D视觉技术及解决方案参加华南工博会国际机器视觉展
  7. 安卓电子书格式_(干货)mobi电子书,没有Kindle也能读?
  8. abab的四字成语_abab的四字成语有哪些成语大全
  9. AntDesign Upload组件上传图片
  10. 饿了么自动登录解决方案(手机短信登录)