目录文件的操作函数 mkdir ,opendir,readdir,closedir

1.  int mkdir(const char *pathname, mode_t mode);   头文件 :<sys/stat.h>  <sys/types.h>

功能:创建一个目录
参数:pathname:目录的路径名
mode:目录的权限(可读,可写,可执行)
返回值:成功返回0,失败返回-1

2.   DIR *opendir(const char *name);      头文件 :<sys/types.h>    <dirent.h>

功能:获得目录流
参数:要打开的目录
返回值:成功:目录流  ;失败:NULL

3.   struct dirent *readdir(DIR *dirp);   头文件 :<dirent.h>
功能:读目录
参数:要读的目录流
返回值:成功返回结构体指针,失败返回NULL

4.   int closedir(DIR *dirp);        头文件 :<dirent.h>  <sys/types.h> 
功能:关闭目录流
参数:目录流
返回值:成功0 ;失败-1

 

例子:通过上述函数实现 shell 中的 ls 功能

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, const char *argv[])
{
    mkdir("./test",0666);//在当前路径下,创建一个目录  目录权限0666
//    DIR *opendir(const char *name);
    DIR *dir = NULL;
    dir = opendir("./");//打开一个目录,成功返回路径名
    if(dir == NULL)
    {
        perror("opendir fail : ");
        exit(1);
    }
    
//  struct dirent *readdir(DIR *dirp);
    struct dirent * ret = NULL;
   
    
#if 1  //循环读,直到读完当前目录下的内容
    int i=0;
    while(1)
    {
        ret = readdir(dir);//读取这个目录,返回 DIR *指针,目录流
        if(ret == NULL)
        {
            break;
            perror("read fail : ");
        }
        //  去除 . 和 ..隐藏文件
        if( strcmp(ret->d_name,".")==0 || strcmp(ret->d_name,"..")==0 ) 
        { 
            continue;
        }
        i++;
        printf("[%d] %s\n",i,ret->d_name);    
    }
#endif
    closedir(dir);//关闭
    return 0;
}

测试:

 

posted on 2019-05-24 20:43  管理员D  阅读(820)  评论(0编辑  收藏  举报

导航