18-19 目录IO

来源:互联网 发布:2017淘宝禁售商品明细 编辑:程序博客网 时间:2024/05/29 03:18

1. 文件IO和标准IO是对文件的读写操作

目录IO是对目录的读写操作

目录I/O与文件I/O函数的比较

目录I/O

文件I/O

opendir 只能打开目录

mkdir  创建目录

open

readdir  读目录

read

rewinddir   调整位置指针

telldir

seekdir

rewind

ftell

fseek

closedir:关闭目录

close


2. opendir

DIR *opendir(const char *pathname) ;

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

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

 

3.  mkdir

int mkdir(const char  * path,  mode_t  mode) 

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

mode为该目录的访问权限

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


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


4. readdir

struct dirent *readdir(DIR *dr);

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


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

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

       ino_t d_ino;      // inode 号
       chard_name[NAME_MAX+1];//文件名

5.  rewinddir:重置读取目录流的位置为开头

void rewinddir(DIR *dr);

 参数:目录流指针


6. telldir 

long telldir(DIR *dirp) 

参数:目录流指针

返回值:目录流当前位置

 

7. seekdir

void seekdir(DIR *dirp , long loc) 

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

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


8.  closedir
int close(DIR *dr);

参数:目录流指针

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


9. 目录IO操作示例

#include "stdio.h"#include "sys/types.h"#include "dirent.h"int main(int argc, char *argv[]){int ret;DIR *dp;struct dirent *dir;long loc;if (argc < 2){printf("please input open directory\n");return -1;}dp = opendir(argv[1]);if(dp == NULL){printf("open mydir error\n");return -2;}while(1){dir = readdir(dp);loc = telldir(dp);printf("loc =%d\n",loc);if(dir != NULL){printf("inode = %ld,name=%s\n",dir->d_ino,dir->d_name);}else{break;}}closedir(dp);return 0;}











0 0
原创粉丝点击