灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2266回复:0

unix下面目录的详细操作(包括实现给定目录遍历下面所有文件)

楼主#
更多 发布于:2012-08-27 15:07

unix下面目录的详细操作(包括实现给定目录遍历下面所有文件)
与目录相关的有:
#include<dirent.h>
(1)DIR *opendir(const char *pathname);
打开一个目录,并且返回一个DIR类型的指针
(2)struct dirent *readdir(DIR *dp);
读一个目录并且返回一个dirent类型的指针。
(3)void rewinddir(DIR *dp);
(4)long telldir(DIR *dp);
(5)void seekdir(DIR *dp,long loc);
与目录操作有关的结构体有:
dirent结构体:
struct dirent {
ino_t d_ino; /* 索引号 */
off_t d_off; /* 下一个偏移量 */
unsigned short d_reclen; /* 本记录长度 */
unsigned char d_type; /* 文件类型 */
char d_name[256]; /* 文件名 */
};
DIR结构体
struct __dirstream
  {
    void *__fd;                        /* `struct hurd_fd' pointer for descriptor.  */
    char *__data;                /* Directory block.  */
    int __entry_data;                /* Entry number `__data' corresponds to.  */
    char *__ptr;                /* Current pointer into the block.  */
    int __entry_ptr;                /* Entry number `__ptr' corresponds to.  */
    size_t __allocation;        /* Space allocated for the block.  */
    size_t __size;                /* Total valid data in the block.  */
    __libc_lock_define (, __lock) /* Mutex lock for this structure.  */
  };
typedef struct __dirstream DIR;
应用上面的所有知识可以解决有关目录操作的所有问题了。下面写了一个简单的程序来说明相关函数的应用:
题目:给定一个目录,然后遍历目录下面所有的文件,并打印文件名
#include<dirent.h>
#include<stdio.h>
int main(int argc,char **argv)
{  
   DIR *dirp;
   struct dirent *direntp;
   if(argc!=2)
   {
       printf("formant error!n");
   }
  
   dirp=opendir(argv[1]);
   while((direntp=readdir(dirp))!=NULL)
     {
          printf("%sn",direntp->d_name);
     }
   close(dirp);
   exit(0);
}
作者 liangxanhai

喜欢0 评分0
游客

返回顶部