高编:文件编程——目录

01-打开目录 -- opendir
02-读目录   -- readdir
03-关闭目录 -- closedir

一、opendir

#include <dirent.h>
DIR *opendir(const char *name);
功能:
    打开一个目录获得一个目录流指针
参数:
    name:目录名
返回值:
    成功 返回目录流指针
    失败 返回NULL

  1 #include <stdio.h>                                                                         
  2 #include <dirent.h>
  3 
  4 int main(int argc, const char *argv[])
  5 {
  6     DIR *dir = opendir(argv[1]);
  7     
  8     if (dir == NULL)
  9     {
 10         perror("opendir fail");
 11         return -1;
 12     }   
 13     
 14     printf("success\n");
 15     
 16     return 0;
 17 } 

二、readdir


struct dirent *readdir(DIR *dirp);
功能:
    从目录流中读取文件信息并将保存信息的结构体
    地址返回
参数:
    dirp:目录流指针
返回值:
    包含文件信息的结构体
    出错或者读到目录流末尾返回 NULL

  1 #include <stdio.h>                                                                                                                                                                 
  2 #include <dirent.h>
  3 
  4 int main(int argc, const char *argv[])
  5 {
  6     DIR *dir = opendir(argv[1]);
  7 
  8     if (dir == NULL)
  9     {
 10         perror("opendir fail");
 11         return -1;
 12     }
 13 
 14     printf("success\n");
 15 
 16     while (1)
 17     {
 18         struct dirent *pdir = readdir(dir);
 19 
 20         if (pdir == NULL)
 21             break;
 22         printf("Inode = %ld\n",pdir->d_ino);
 23         printf("type = %d\n",pdir->d_type);
 24         printf("name = %s\n",pdir->d_name);
 25     }
 26 
 27     closedir(dir);
 28 
 29     return 0;
 30 }

 练习:实现ls的功能

  1 #include <stdio.h>
  2 #include <dirent.h>
  3 
  4 int main(int argc, const char *argv[])
  5 {
  6     if (argc != 2)
  7     {
  8         printf("Usage:%s <dirname>\n",argv[0]);
  9         return -1;
 10     }
 11 
 12     DIR *dir = opendir(argv[1]);
 13     if (dir == NULL)                                                                                                                                                               
 14     {
 15         perror("opendir fail");
 16         return -1;
 17     }
 18 
 19     struct dirent *pdir = NULL;
 20     while (pdir = readdir(dir))
 21     {
 22         if (pdir->d_name[0] != '.')
 23         printf("%s  ",pdir->d_name);
 24     }
 25 
 26     putchar('\n');
 27     closedir(dir);
 28 
 29     return 0;
 30 }

三、chdir


chdir ("/home/linux"); "../../"
fopen("1.mp4")
int chdir(const char *path);// /home/linux
功能:
    改变当前程序的工作路径
参数:
    path:改变到的路径
返回值:
    成功返回0
    失败返回-1

四、getcwd //pwd 


char *getcwd(char *buf, size_t size);
功能:
    获得当前的工作路径
参数:
    buf:保存工作路径空间的首地址
    size:保存路径空间的长度
返回值:
    成功返回包含路径空间的字符串首地址
    失败返回NULL

  1 #include <stdio.h>                                                      
  2 #include <unistd.h>
  3 
  4 int main(int argc, const char *argv[])
  5 {
  6     char buf[100];
  7     getcwd(buf,sizeof(buf));
  8     printf("buf = %s\n",buf);
  9 
 10     if (chdir("/home/linux")  < 0)
 11     {
 12         perror("chdir fail");
 13         return -1;
 14     }
 15 
 16     getcwd(buf,sizeof(buf));
 17     printf("buf = %s\n",buf);
 18     return 0;
 19 }

五、mkdir 


int a  =200;
int mkdir(const char *pathname, mode_t mode);//777  666 --x--x--x
功能:
    创建一个目录
    666-
参数:
    pathname:路径
    mode:
        mode & ~umask  0002 

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

  1 #include <stdio.h>                                                      
  2 #include <sys/stat.h>
  3 #include <sys/types.h>
  4 
  5 int main(int argc, const char *argv[])
  6 {
  7     if (mkdir(argv[1],0666) < 0)
  8     {
  9         perror("mkdir fail");
 10         return -1;
 11     }
 12 
 13     return 0;
 14 }

六、rmdir  


int rmdir(const char *pathname);
功能:
    删除一个空目录文件
参数:
    pathname:目录文件的名字
返回值:
    成功返回0
    失败返回-1

173 int rmdir_dir(int num,const char *dirname)
174 {
175     if (num != 2)
176     {
177         printf("Usage:%s dirnamn\n",str[0]);
178         return -1;
179     }
180 
181     if (rmdir(str[1]) < 0)                                              
182     {
183         perror("rmdir fail");
184         return -1;
185     }
186     return 0;
187 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值