UNIX 环境高级编程 1.4 __实现简单的 ls

源码

#include<dirent.h>
#include"apue.h"
int main(int argc,char *argv[])
{
    DIR *dp;
    struct dirent *dirp;
    if(argc != 2)
    {   
        err_quit("usage: ls directory_name");
    }   
    if((dp = opendir(argv[1])) == NULL)
    {   
        err_sys("can't open %d",argv[1]);
    }   
    while((dirp = readdir(dp)) != NULL)
    {   
        printf("%s\n",dirp->d_name);
    }   
    closedir(dp);
    exit(0);
}

DIR 和 dirent 均为 dirent.h 中定义的结构体

DIR 是一个指向文件目录的结构体指针, 原型为:

struct __dirstream   
   {   
    void *__fd;    
    char *__data;    
    int __entry_data;    
    char *__ptr;    
    int __entry_ptr;    
    size_t __allocation;    
    size_t __size;    
    __libc_lock_define (, __lock)    
   };   
  typedef struct __dirstream DIR; 

dirent 是保存文件信息的结构体指针,其原型为

struct dirent
{
   long d_ino; /* inode number 索引节点号 */
   off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
   unsigned short d_reclen; /* length of this d_name 文件名长 */
   unsigned char d_type; /* the type of d_name 文件类型 */
   char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
}

opendir 与 readdir

opendir 函数原型

	DIR* opendir(const char* path); //path 是一个路径,打开这个目录,返回目录地址,  如果 path 为空或者 是文件则返回 NULL

readdir 函数原型

struct dirent* readdir(DIR* dirp);	//每次使用 readdir 后, readdir 读取目录的下一个文件,直到文件读取完毕,每次只能读取一个

closedir

关闭所指的目录

 	int closedir(DIR* dir); //成功返回 0, 失败返回 -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值