ls对于每一个linux的用户来说都不会陌生。
下面看下一个简单的ls的c语言实现:
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <unistd.h>
-
#include <dirent.h>
-
-
int main(int argc,char **argv)
-
{
-
DIR *dp;
-
struct dirent *dirp;
-
-
if(argc != 2)
-
{
-
printf("usage:%s directory_name\n",argv[0]);
-
exit(1);
-
}
-
-
dp = opendir(argv[1]);
-
if(NULL == dp)
-
{
-
perror("opendir");
-
exit(1);
-
}
-
-
while((dirp = readdir(dp)) != NULL)
-
printf("%s\n",dirp->d_name);
-
-
closedir(dp);
-
-
return 0;
-
}
编译执行后的结果:
虽然没这样的代码没有linux下面的ls命令那么强大,但是显示目录下的所有的文件还是可以实现的!有兴趣的话,可以深入去研究下linux是如何实现ls命令的!
在上面的代码中,我们看到了两个比较陌生的结构体,下面就来讲解下这两个结构体:
先说下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;
对于DIR结构体,我也不是特别了解,现在也只知道这么点!
来了解下struct dirent结构体:
我们可以通过结构体下的d_name[256]成员来打印目录下文件名或者目录名!
阅读(1849) | 评论(0) | 转发(0) |