linux系统编程之目录操作

版权声明:本文为博主原创文章,转载时请标明来源。 https://blog.csdn.net/aiwangtingyun/article/details/86554596

目录的操作函数:具体功能请查看帮助手册 man 3 opendir

   // 打开目录
   DIR *opendir(const char *pathname)  // 成功返回指针 失败返回NULL
   // 遍历目录
   struct dirent *readdir(DIR *dp)     // 成功返回结指针,失败或到目录尾返回NULL
   // 重置目录流指针位置
   void rewinddir(DIR *dir)
   // 关闭打开的目录流
   int closedir(DIR *dir)
   // 获取目录流当前位置
   off_t telldir(DIR *dir)
   // 偏移目录流指针位置
   void seekdir(DIR *dir, off_t offset)

目录属性包含在结构体 struct dirent 中,查看 man 3 readdir

   struct dirent {
      ino_t          d_ino;       /* Inode 号 */
      off_t          d_off;       /* 目录流当前的位置 */
      unsigned short d_reclen;    /* 当前record的长度 */
      unsigned char  d_type;      /* 目录文件类型 */
      char           d_name[256]; /* 目录路径 */
   };

结构体 struct dirent 与实现有,但最少会包含前两个成员


应用这两个函数打印当前所在的目录属性
#include <stdio.h>
#include <sys/types.h>     // Linux系统下特有的
#include <dirent.h>        // 操作文件目录的库

int main(int argc, char *argv[])
{
   char *path = "./";      // 默认路径
   DIR  *pDir;             // 目录流指针

   // 打开目录
   pDir = opendir(path);
   if (NULL == pDir)
   {
      perror(path);
      return -1;
   }
   
   // 遍历目录
   struct dirent *pEnt;    
   while (1)
   {
      // 读取一条目录项
      pEnt = readdir(pDir);
      if( pEnt == NULL)  break; 
      printf("ino:%ld  name:%s\n", pEnt->d_ino, pEnt->d_name);

      // 文件类型
      switch (ent->d_type)
      {
         case DT_BLK : printf("block device.\n");        break;     
         case DT_CHR : printf("character device.\n");    break;
         case DT_DIR : printf("directory.\n");           break;  
         case DT_FIFO: printf("named pipe (FIFO).\n");   break; 
         case DT_LNK : printf("symbolic link.\n");       break;  
         case DT_REG : printf("regular file.\n");        break;
         case DT_SOCK: printf("UNIX domain socket.\n");  break; 
         case DT_UNKNOWN: printf("could not be determined.\n"); break;
      }
   }

   // 用完记得关闭目录
   closedir(pDir);
   return 0;
}

更改目录操作
  // 通过目录路径更改当前工作目录
  int chdir(const char *path);
  // 通过文件描述符更改当前工作目录
  int fchdir(int fildes);	
  // 获取当前绝对工作路径保存在buf里
  char *getcwd(char *buf, size_t size);

猜你喜欢

转载自blog.csdn.net/aiwangtingyun/article/details/86554596
今日推荐