目录IO

目录IO

#include <sys/types.h>

基本系统数据类型

是Unix/Linux系统的基本系统数据类型的头文件,含有size_t,time_t,pid_t等类型。

#include <dirent.h>

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

目录IO与文件IO函数的比较

目录IO 文件IO
opendir 只能打开目录 mkdir 创建目录 open
readdir 读目录 read
rewinddir 调整位置指针 telldir seekdir rewind ftell fseek
closedir****:关闭目录 close

1. opendir

 DIR *opendir(const char *pathname) ;

参数:打开的目录以及路径

返回值:成功返回目录流指针,出错返回NULL。

2.int mkdir(const char * path, mode_t mode)

参数:

path为欲创建的目录文件路径,

mode为该目录的访问权限

返回值:若目录创建成功,则返回0;否则返回-1

生成的目录权限仍和umask有关系。

3.readdir

 struct dirent *readdir(DIR *dr);//每次读将目录流指针向后移动一个单位

参数:目录流指针
返回值:成功则为struct dirent指针,若在目录尾或出错则返回NULL。

struct dirent定义在头文件dirent.h中。

此结构至少包含下列两个成员

   struct dirent

  {
     ino_t d_ino;   // inode 号(文件身份证) 可以通过 `ls  -li` 进行查看
     char d_name[NAME_MAX+1]; //文件名
   } 

例子:

#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
int main(int argc, char* argv[]){
	DIR *dp =  opendir(argv[1]); 
	struct dirent *dir = NULL;
	while((dir=readdir(dp))!=NULL){
		printf("ino is %ld===name is %s\n", dir->d_ino,dir->d_name);
	}
	losedir(dp);
}

4.rewinddir telldir seekdir 重设指针

void rewinddir(DIR *dr);

参数:目录流指针

long telldir(DIR *dirp) 

参数:目录流指针

返回值:目录流当前位置

void seekdir(DIR *dirp , long loc) 

类似于文件定位函数fseek(),在目录流上设置下一个readdir()操作的位置。

参数:目录流指针和偏移量

5.closedir

 int close(DIR *dr); 

参数:目录流指针

返回值:成功返回 0,出错返回- 1。

posted @ 2020-12-20 21:23  lsxkugou  阅读(140)  评论(0编辑  收藏  举报