linux详解--3.目录IO(超详细的目录IO,全网最全,适合0基础直接学习)

继上文对于文件IO的讲解,本文将继续为大家介绍文件的操作第三部分目录IO操作,同之前的学习习惯相同我们也从打开、读写、关闭目录,这个思路对于目录IO的各个函数接口进行具体的详解。

目录IO学习思路

打开目录----opendir

读取目录-----readdir

关闭目录-----closedir

1.打开文件

函数接口:opendir

DIR *opendir(const char *name);

作用:

  • 打开一个目录获得一个目录流指针。

参数:

  • name:目录名

返回值:

  • 成功返回目录流指针
  • 失败返回NULL
	int main(void)
    {
        DIR *dir = opendir(".");
	    if(NULL == dir)
	    {
		    printf("fail to opendir.\n");
		    return -1;
	    }
        return 0;
    }

以上代码段为打开“.”当前路径下的文件,该段代码的功能为打开当前文件路径下的目录,并且可以判断是否失败打开的操作。

2.读文件

函数接口:readdir

struct dirent *readdir(DIR *dirp);

作用:

  • 从目录流中读取文件信息并将保存信息的结构体地址返回。

参数:

  • dirp:目录流指针

返回值:

  • 成功返回包含文件信息的结构体
  • 失败或者读到目录流末尾返回NULL

参考linux手册,输入man 3 readdir,查看返回的结构体包含的内容

struct dirent {
        ino_t         d_ino;       /* Inode number */        索引节点号
        off_t        d_off;       /* Not an offset; see below */
        unsigned short d_reclen;    /* Length of this record */
        unsigned char  d_type;      /* Type of file; not supported by all filesystem types */
        char        d_name[256]; /* Null-terminated filename */        文件名
                    };

int main(void)
{
	DIR *dir = opendir(".");
	if(NULL == dir)
	{
		printf("fail to opendir.\n");
		return -1;
	}                                           //打开目录

	while(1)                                    //循环读取
	{
		struct dirent *info = readdir(dir);
		if(NULL == info)                        //判断是否读取成功和结束标识
		{
			break;
		}
		printf("%ld %s\n", info->d_ino, info->d_name);
	}
	
	closedir(dir);                               //关闭目录
	return 0;
}

以上代码为第一个代码的延续,在打开目录以后进行readdir的读取目录操作,并且打出当前路径下的各个目录的索引号和文件名的信息。

3.关闭文件

函数接口:closedir

int closedir(DIR *dirp);

作用:

  • 关闭之前已经打开的目录流对象。

参数:

  • *dirp:opendir的返回结果中目录流对象

返回值:

  • 成功返回0
  • 失败返回-1

目录流指针有借有还,在创建了文件留指针以后要记得关闭。

目录IO的基础操作就为以上的步骤,后续文章将为大家介绍目录IO的提升操作,希望大家持续关注,如果有问题,希望大家及时私聊我,或者在评论区积极讨论,谢谢大家!

你可能感兴趣的:(linux,c语言)