Linux C目录操作

宗旨:技术的学习是有限的,分享的精神是无限的。

Linux思想“一切皆文件”,目录也是文件,只是存储的内容有别于普通文件。目录文件中存储的该目录下所有的文件及子目录文件的信息,inode节点。

一、打开/关闭目录文件

1、 opendir

——打开目录

(1)函数原型

#include <dirent.h>
DIR *opendir(const char *dirname);

(2)函数参数

dirname:要打开的目录路径

(3)返回值

执行成功返回一个目录流指针(与文件流类似,直接用就行),失败返回NULL。

2、 closedir

——关闭指定的目录流

(1)函数原型

#include <dirent.h>
int *closedir(DIR *stream);

(2)函数参数

stream:目录流指针(类似于文件流指针fp一样)

(3)返回值

执行成功返回0,执行失败返回-1。

这两函数操作的对象DIR对用户层是透明,不必关心其实现细节。

【typedef struct dirstream DIR】

二、读/写目录内容

1、 readdir

——读取目录内容(目录下存储的是该目录下的文件名和对应的磁盘inode信息位置,读取目录内容就是读取该目录下的文件名及文件信息。)

(1) 函数原型

struct dirent *readdir(DIR *stream)
struct dirent
{long d_ino;               // inode值off_t d_off;               //从目录开始到当前目录条的距离unsigned shortd_reclen;    // 存储文件名的空间大小unsigned char d_type;      // 文件类型char d_name[256];         // 文件名,’\0’结束
};

(2)函数参数

stream:目录流指针

(3)返回值

每调用一次,返回指向下一个目录的指针,失败返回NULL。

2、 readdir_r

——读取目录内容(readdir在多线程中不安全,readdir_r解决了多线程中不安全的问题)

(1)函数原型

int readdir_r(DIR *stream, struct dirent *entry, struct dirent **result);

(2)函数参数

stream:目录流指针

entry:表示第一个参数所引用的目录流中的当前位置

result:指示的位置存储指向该结构的目录信息

(3)返回值

返回成功,在第三个参数返回一个指向描述目录条目的struct dirent类型的指针,到达目录结尾,则第三个参数中返回NULL指针,函数返回0;执行失败返回-1.

三、定位目录位置

1、 telldir

——目录流相关联的当前位置

(1)函数原型

long int telldir(DIR *stream);

(2)函数参数

stream:目录流指针

(3)返回值

成功返回一个long类型的位置值,指示目录中的当前位置,失败返回-1。

2、 seekdir

——在目录流中设置下一个readdir操作的位置

(1)函数原型

void seekdir(DIR *stream, long int loc);

(2)函数参数

stream:目录流指针

loc:从telldir()获取的目录流中的一个位置

(3)返回值

无返回值,错误将设置errno

3、 rewinddir

——将目录流的位置重置到目录的开头

(1)函数原型

void rewinddir(DIR *stream);

(2)函数参数

stream:目录流指针

(3)返回值

将stream引用的目录流的位置重置到目录的开头。

四、添加和删除目录

1、 mkdir

——创建一个目录

(1)函数原型

int mkdir(const char *path, mode_t mode);

(2)函数参数

path:欲创建的文件的路径

mode:目录的访问权限,【mode&~umask&0777】

(3)返回值

执行成功返回0,失败返回-1。

2、 rmdir

——删除目录

(1)函数原型

int rmdir(const char *path);

(2)函数参数

path:欲删除的目录文件路径

(3)返回值

执行成功返回0,失败返回-1。

五、获取当前工作路径操作

char *getcwd(char *buf, size_t size); // 将当前路径的绝对路径置于buf并返回buf,size的大小必须比返回的路径名长度大1,否则返回NULLchar *get_current_dir_name(void);// 成功返回绝对路径,失败返回NULL<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">  </span>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>int main(int argc, char *argv[]) /* 浏览指定文件夹下的文件 */
{DIR *stream;struct dirent *dp;stream = opendir(argv[1]);while((dp = readdir(stream)) != NULL){if(dp->d_name[0] == '.'){continue;}printf("%s   ", dp->d_name);}closedir(stream);return 0;
}

Linux C高级编程——目录操作相关推荐

  1. Linux C高级编程——文件操作之库函数

    Linux C高级编程--文件操作之库函数 宗旨:技术的学习是有限的,分享的精神是无限的 --为什么要设计标准I/O库? 直接使用API进行文件访问时,需要考虑许多细节问题 例如:read.write ...

  2. Linux C高级编程——文件操作之系统调用

    Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神是无限的! 库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准.使用库函数编写的函数一般可以应用 ...

  3. linux环境编程 学习,学习linux环境高级编程首先学习的是文件的操作。因为有.pdf...

    学习linux环境高级编程首先学习的是文件的操作.因为有 学习 Linux 环境高级编程,首先学习的是文件的操作.因为有一句很有趣的话"Linux 下一切皆文件".所以掌握了文件操 ...

  4. Linux环境高级编程函数,Linux环境高级编程--出错处理(CLStatus)

    很多程序库对外提供若干类,每个方法出错时如何告知调用者是否出错,以及出错码(在Linux上在error.h中的全局errno就是保存我们Linux程序执行的出错码的)?方法很多,为了简化起见,函数将返 ...

  5. Linux 服务器高级编程ET LT代码

    linux 服务器高级编程ET LT代码 #include<sys/types.h> #include<sys/socket.h> #include<netinet/in ...

  6. 《Linux操作系统 - 高级编程》第一部分 标准IO及文件IO(第2章 标准IO)

    2.1 Linux I/O概述 2.1.1文件I/O和标准I/O的概念 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O).不带缓存指的是每个read,write都调用内核中的 ...

  7. linux web高级编程,寒假学习 第16.17天 (linux 高级编程)

    寒假学习 第16.17天 (linux 高级编程) 笔记 总结 一.进程的基本控制(进程的同步) 1.进程的常见控制函数 pause   sleep/usleep atexit   on_exit i ...

  8. Linux C高级编程——网络编程之API(5)

    Linux C网络编程--API 宗旨:技术的学习是有限的,分享的精神的无限的.          一.基本socket函数 Linux系统是通过提供套接字(socket)来进行网络编程的.网络的so ...

  9. Linux C高级编程——网络编程基础(1)

    Linux高级编程--BSD socket的网络编程 宗旨:技术的学习是有限的,分享的精神是无限的. 一网络通信基础 TCP/IP协议簇基础:之所以称TCP/IP是一个协议簇,是因为TCP/IP包含T ...

最新文章

  1. 智源大会参会指南:4天 100+场顶尖报告,硬核高密度,如何才能不留遗憾?
  2. pandas索引和选择数据
  3. 树莓派3b+在tf卡配置wifi连接+ssh
  4. 如何申请一份iOS工作
  5. K-Backup备份office文件的具体操作。
  6. 前端学习(2545):找不到模块
  7. 在CentOS 7上安装并配置Python 3.6环境
  8. [BlockChain]比特币交易快速上手(基于测试链)
  9. php curl修改ip,php中curl设置ip的方法
  10. java无法替换json中的换行_(NSScanner的使用)替换服务器获取的JSON数据中的换行符(JSON是不能解析带有换行符字符串)...
  11. 好歌推荐 绝对经典(中外结合)
  12. pgpool-II常见错误
  13. 这篇文章有毒《持续更新中。。。》
  14. Vue3动态引入图片
  15. 第三批游戏版号下发 移动安全从业者有话说
  16. 实现在GEF中被选中图形上的右键菜单
  17. 用微信第三方平台授权小程序业务
  18. 浅析PowerBuilder下动态SQL语句
  19. 小波变换:基于matlab的数字图像水印嵌入及提取(灰度图)
  20. Farmer John的故事

热门文章

  1. mysql从入门到精通之数据库基本概念理解
  2. poj2299 ( bit )
  3. Oracle 制造死锁和查询死锁
  4. implements Serializable
  5. 网络爬虫--24.【selenium实战】实现拉勾网爬虫之--分析接口获取数据
  6. pythonfillcolor_openpyxl 填充颜色(单元格)
  7. Django查询 – id vs pk
  8. an 转换器_400V耐压场效应管替代IRF730B型号参数,使用在DC-DC电源转换器。_场效应管吧...
  9. redhat虚拟机安装
  10. unity改变图片像素大小_类动森像素画反向转换 (xBR)