【C语言】之 Linux 系统编程 - 目录操作

本文详细介绍了Linux系统下目录操作的函数,包括打开、遍历、重置、关闭目录流,以及获取和设置目录流位置的方法。同时,深入解析了struct dirent结构体,展示了如何使用这些函数来打印当前目录的属性,并提供了更改目录操作的函数介绍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、目录的操作函数:(具体功能请查看帮助手册 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)

2、目录属性包含在结构体 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 的实现至少会包含前两个成员

3、应用这两个函数打印当前所在的目录属性

#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;
}

4、更改目录操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值