Linux目录操作函数:opendir/readdir/closedir

Linux文件和目录操作函数 1. 文件操作 s_mode 该变量占 2byte 共 16位 掩码的使用:st_mode & 掩码 其他人权限(0-2 bit) S_IROTH 00004 读权限 S_IWOTH 00002 写权限 S_IXOTH 00001 执行权限 S_IRWXO 00007 掩码,过滤st_mode中除其他人权限以外的信息 所属组权限(3-5 bit) S_IRGRP 00040 读权限 S_IWGRP 00020 写权限 S_IXGRP 00010 执行权限 S_IRWXG 00 阅读详情

DIR* opendir (const char * path );

struct dirent* readdir(DIR* dir_handle); 

int closedir(DIR * dir_handle);


1. opendir

头文件:

  #include<sys/types.h>

  #include<dirent.h>

函数原型:

  DIR* opendir (const char * path ); 

功能:

  打开一个目录,在失败的时候返回一个空的指针。

返回值:

       DIR*, DIR构体的原型为:struct  __dirstream

       在linux系统中:

1
2
3
4
5
6
7
8
9
10
11
12
13
   #include<dirent.h>
   typedef struct __dirstream DIR;
   struct __dirstream
   {
     void *__fd; /* `struct hurd_fd' pointer for descriptor.   */
     char *__data; /* Directory block.   */
     int __entry_data; /* Entry number `__data' corresponds to.   */
     char *__ptr; /* Current pointer into the block.   */
     int __entry_ptr; /* Entry number `__ptr' corresponds to.   */
     size_t __allocation; /* Space allocated for the block.   */
     size_t __size; /* Total valid data in the block.   */
     __libc_lock_define (, __lock) /* Mutex lock for this structure.   */
    };

2. readdir

头文件:

#include<dirent.h>

函数原型:

struct dirent* readdir(DIR* dir_handle); 

功能:

读取opendir 返回值的那个列表

返回值:

返回dirent结构体指针,dirent结构体成员如下,(文件和目录都行)

1
2
3
4
5
6
7
8
struct dirent
{
    long 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 [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
}

opendir(3)/readdir(3)/closedir(3)用于遍历目录数据块中的记录。

以下这段代码是打开目录(opendir),读取目录下文件(readdir),关闭目录(closedir)的使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
int main()
{
      void DirTravl(const char *dirpath, const char* filename);
      DirTravl("/", ".cpp");
          
      return 0;
}
          
//遍历目录dirpath,查找文件名中包含filename的文件
void DirTravl(const char *dirpath, const char *filename)
{
    struct dirent *dp;
    DIR *dfd;
      char path[256] = {'\0'};
  
    strcpy(path, dirpath);
    if( (dfd = opendir(path)) == NULL )
    {
          printf("Failed to open directory! dir: %s", path);
          return;
    }
             
    while( (dp = readdir(dfd)) != NULL)
    {  
         if(strstr(dp->d_name, filename)!=NULL)
         {
              printf("%s\n",dp->d_name);
         }
    }
    closedir(dfd);
}


另外几个函数:


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


功能:创建一个名叫pathname的目录,权限(mode & ~umask & 0777)。

           需要  #include<sys/stat.h>

                    #include <sys/types.h>

       

返回值:成功返回0,失败返回-1

     

int rmdir(const char *pathname);  //需要#include <unistd.h>


功能: rmdir() deletes a directory, which must be empty.

      

返回值:成功返回0,失败返回-1


int chdir(const char *path); // #include <unistd.h>

int fchdir(int fd);


功能:chdir函数用于改变当前工作目录。调用参数是指向目录的指针,调用进程需要有搜索整个目录的权限

Linux下用C语言实现ls命令 Linux下用C语言实现ls命令,用gcc编译就能运行了。 立即下载

相关推荐

linux c学习笔记----目录文件的操作(opendir,readdir,closedir)

注:为什么要说目录文件?其实在linux目录也是一种文件,只是它的内容是上级的目录和当前目录下的文件信息等,详情可以看看相关深入的书籍   opendir(打开目录) 相关函数 open,readdirclosedir,rewinddir,seekdir,telldir,scandir 表头文件 #include&lt;sys/types.h&g...

RobertXin 2063

opendir/readdir/closedir 目录遍历相关函数

1.打开目录 所需头文件: #include&lt;sys/types.h&gt; #include&lt;dirent.h&gt; opendir是一个C库函数,可以通过man 3 opendir查看函数相关的详细内容。 函数原型:DIR *opendir(const char *name) 参数:name为目录名。 返回值:成功返回一个指向目录的指针,失败返回NULL,同时er...

乐行僧的博客 1511

Unix/Linux编程:创建、打开、读取等目录------mkdir()、rmdir()、remove()、opendir()、readdir()、rewinddir()、closedir()

创建和移除目录:mkdir()、rmdir() mkdir()系统调用创建一个新目录: SYNOPSIS #include <sys/stat.h> #include <sys/types.h> int mkdir(const char *pathname, mode_t mode); pathname 参数指定了新目录的路径名。该路径名可以是相对路径,也可以是绝对路径。若具有该路径名的文件已经存在,则调用失败并将 errno 置为 E

OceanStar的博客 1004

文件操作opendir()/readdir()/closedir()/stat()

头文件: #include #include 在Linuxopendir()、readdir()和closedir()这三个函数主要用来遍历目录。 int stat(const char *restrict pathname, struct stat *restrict buf); 提供文件名字,获取文件对应属性。 opendir(): 函数原型: DIR * ope

angle_birds的专栏 8067

Linux目录文件的操作(opendir,readdir,closedir) 以及DIR,dirent,stat等结构体详解

From:http://blog.chinaunix.net/uid-27213819-id-3810699.html 注:为什么要说目录文件?其实在linux目录也是一种文件,只是它的内容是上级的目录和当前目录下的文件信息等,详情可以看看相关深入的书籍 opendir(打开目录)   相关函数 open,readdirclosedir,rewi

奔跑的路 1万+

linux opendir路径_Linux目录操作函数opendir/readdir/closedir

DIR*opendir(constchar*path);structdirent*readdir(DIR*dir_handle);intclosedir(DIR*dir_handle);1.opendir头文件:#include#include函数原型:DIR*opendir(constchar*path);功能:打开一个目录,在失败的时候返回一个空的指针。返...

weixin_29047545的博客 761

Linux高并发服务器开发 第十三天(文件系统概念 stat/lstat truncate link/unlink 目录操作函数opendir/closedir/readdir))

硬链接计数为0 (没有 dentry对应) 的文件仍不会马上被释放。要等到所有打开该文件的进程运行结束,没有任何进程使用该文件,此时,系统择机释放该文件。- 一组规则,规定对文件的存储及读取的方式、方法。-vi具有穿透性,读取的是mk.soft指向的文件内容,而readlink读取的是mk.soft本身的内容。- 程序运行结束,打开的文件、申请的内存空间,会被系统自动释放。- 大多数的inode保存在磁盘中,少量常用、进期使用的inode保存内存中。- 调用unlink,只是让文件具备了被释放的条件。

m0_53349772的博客 975

目录文件相关函数(opendirreaddirclosedir、chmod/fchmod、stat/lstat/fstat)

opendir函数用来打开一个目录文件: #include <dirent.h> DIR *opendir(const char *name); Ø DIR是用来描述一个打开的目录文件的结构体类型 Ø 成功时返回目录流指针;出错时返回NULL readdir函数用来读取目录流中的内容: #include <dirent.h> struct dirent *readdir(DIR *dirp); Ø struct dirent是用来描述目录流中一个目录项的结构体类型 Ø 包含

邵潇涵 592

Linux 目录操作opendirreaddirclosedir

目录进行操作,如readdir 打开目录readdir 读取目录closedir 关闭目录

weixin_47457689的博客 1405

opendir\readdir

lseek功能:修改文件的读写指针位置,仅移动指针,不会读写数据,也不会改变文件大小fdoffsetoff_twhenceSEEK_SETSEEK_CURSEEK_ENDoffset:正数向后移;负数向迁移;

2601_96587451的博客 164

linux-文件和目录

1 stat/lstat函数 函数描述: 获取文件属性 函数原型: int stat(const char *pathname, struct stat *buf); int lstat(const char *pathname, struct stat *buf); 函数返回值: 成功返回 0 失败返回 -1 struct stat { dev_t st_dev; //文件的设备编号 ino_t st_ino; /

qq_43605009的博客 473

文件IO-目录操作和文件属性获取

/块大小(文件系统的I/O缓冲区大小)//连到该文件的硬连接数目,刚建立的文件值为1。//(设备类型)若此文件为设备文件,则为其设备编号。//文件的类型和存取的权限。S_ISSOCK(st_mode) 0140000 是否SOCKET文件。S_ISFIFO(st_mode) 0010000 是否FIFO文件。S_ISREG(st_mode) 0100000 是否常规文件。S_ISLNK(st_mode)0120000 是否链接文件。

2201_75441920的博客 142

Linux编程入门(5)-读取目录(ls 初步实现)

学习目标 通过分析 ls 指令,来学习 Linux 目录和文件属性相关的知识。 代码实验环境 操作系统:Ubuntu 18.04 LTS 编译器 gcc 版本:gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 ls 指令介绍 ls 指令可以列出目录中所有文件的名字,以及这些文件的其他信息。 在命令行输入 ls: $ ls bin etc lib media root srv usr boot home

一起学嵌入式 2029

操作系统(4)系统级I/O函数(2)

文件描述符是一个。

wt20050610的博客 1018

Linux 高并发学习笔记 - Linux 目录操作函数

Linux 目录操作函数。chdir函数切换工作目录,getcwd函数查看工作目录,mkdir函数创建目录,rmdir函数与remove函数移除目录或文件,rename函数重命名或移动目录或文件。opendir函数closedir函数readdir函数,seekdir函数实现目录遍历。

凉皮大大的博客 316

Linux系统编程笔记_5(linux文件、目录操作函数)

文件属性操作函数 access函数 chmod函数 chown函数 在/etc/passwd中查看用户ID,所在组ID 也可以通过/etc/group查看组的ID 默认创建一个用户,组名和用户名是一样的 turncate函数 目录属性操作函数 mkdir函数 如果直接man mkdir是查看的linux的mkdir命令用法 man 2 mkdir是linux系统函数 一个目录必须具有可执行权限才能进入到这个目录下 rmdir函数 作用非常小,只能删除空目录,如果目录里有文件必须删除掉才能再

qq_45799727的博客 257

Linux编程- 文件与目录操作

在获取文件权限组的时候,我们常采用掩码,按位与的形式获取,而一次性将用户、组、其他的掩码按位或组合在一起,然后再和st_mode进行按位与,即可取出八进制数的文件权限组。其中,对于文件类型的属性,该位st_mode为32位无符号整型数,但是内核真正只使用低 16 位存放文件类型 + 权限,高 16 位保留 / 未使用;返回的DIR为系统定义的文件指针,可以用于接下来的readdir函数传入,读取文件信息。练习:打印当前文件所在的路径,将路径切换到主目录下,在主目录创建123.txt文件。

2401_82879595的博客 180

Linux系统编程核心技能:文件读写、目录遍历与Makefile工程管理

本文介绍了Linux系统编程中的文件IO操作目录遍历和Makefile工程管理三大核心内容。文件IO部分详细讲解了read()/write()系统调用的使用方法和完整示例;目录操作阐述了opendir()/readdir()/closedir()三步骤流程及实现ls命令的实践;Makefile部分从基础规则到进阶变量使用,展示了自动化编译的演进过程。文章还提供了综合项目示例和最佳实践建议,强调错误处理、资源释放等重要注意事项,为开发高效可靠的Linux应用程序提供了实用指导。

YangXY66的博客 886
上一篇: Source Insight使用技巧总结
下一篇: fcntl使用
ChrisXiaoxh
博客等级 码龄19年 6粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值