LINUX下用C语言历遍目录 C语言列出目录
#include<dirent.h>
{
DIR *p;
struct dirent *dirp;
if (argc != 2)
{
printf("the director name is requried");
exit(0);
}
if ((p = opendir(argv[1])) == NULL)
{
printf("not open %s",argv[1]);
exit(0);
}
while( (dirp = readdir(p)) != NULL)
printf("%s\n",dirp -> d_name);
closedir(p);
exit(0);
}
打开目录-》读取-》关闭目录
相关函数是
opendir -> readdir -> closedir
#include <dirent.h>
DIR *opendir(const char *dirname);
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
#include <dirent.h>
int closedir(DIR *dirp);
好了,三个函数都出来了呵呵,原型就是上面,给自己解释一下免得以后我自己忘了呵呵!我以经忘过好几回了,所以这次放上博客来
opendir用于打开目录,是类似于流的那种方式,返回一个指向DIR结构体的指针他的参数*dirname是一个字符数组或者字符串常量,
readdir函数用于读取目录,他只有一个参数,这个参数主opendir返回的结构体指针,或者叫句柄更容易理解些吧。这个函数也返回一个结构体指针 dirent *
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 */
char d_name [NAME_MAX+1]; /* file name (null-terminated) */
}
结构体中d_ino存放的是该文件的结点数目,什么是结点数目呢我也说不清楚了呵呵,查一下其它资料了(这里应该不是节点数目,而是其下文件的索引节点号inode)
d_off 是文件在目录中的编移,具体是什么意思我也不是很明白,我很少用到它,其本上就是用到d_name ,short d_reclen是这个文件的长度,需要注意的是这里的长度并不是指文件大小,因为大小和长度是2回事了,你可以用lseek将文件长度移得很长,但大小其实还是那么大.最后一个元素就是我们要的了,文件名称!
写了一个实例:
/**
* 功能: Linux下C语言目录历遍 (读取目录)
* 作者: 小徐
* 邮箱: xjtdy888@163.com
* QQ: 339534039
* 转载请注明出处
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <dirent.h>
void print_usage(void);
void print_usage(void)
{
printf("Usage: test dirname\n");
}
int main(int argc,char *argv[])
{
DIR * dp;
struct dirent *filename;
if (argc < 2)
{
print_usage();
exit(1);
}
dp = opendir(argv[1]);
if (!dp)
{
fprintf(stderr,"open directory error\n");
return 0;
}
while (filename=readdir(dp))
{
printf("filename:%-10s\td_info:%ld\t d_reclen:%us\n",
filename->d_name,filename->d_ino,filename->d_reclen);
}
closedir(dp);
return 0;
}将上面代码保存为readdir.c执行下面的命令进行编译测试
[root@phpos ~]# gcc readdir.c
[root@phpos ~]# ./a.out
Usage: test dirname
[root@phpos ~]# ./a.out /etc/samba/
filename:lmhosts d_info:49296 d_reclen:24s
filename:smb.conf d_info:49825 d_reclen:24s
filename:smbpasswd d_info:49402 d_reclen:24s
filename:.. d_info:47906 d_reclen:16s
filename:secrets.tdb d_info:49812 d_reclen:24s
filename:. d_info:49295 d_reclen:16s
filename:smbusers d_info:49377 d_reclen:24s
[root@phpos ~]# ./a.out /var/
filename:preserve d_info:31971 d_reclen:24s
filename:lock d_info:31966 d_reclen:16s
filename:yp d_info:31976 d_reclen:16s
filename:empty d_info:31962 d_reclen:24s
filename:run d_info:31972 d_reclen:16s
filename:lib d_info:31939 d_reclen:16s
filename:nis d_info:31969 d_reclen:16s
filename:local d_info:31965 d_reclen:24s
filename:spool d_info:31973 d_reclen:24s
filename:tmp d_info:31941 d_reclen:16s
filename:opt d_info:31970 d_reclen:16s
filename:log d_info:31959 d_reclen:16s
filename:crash d_info:31997 d_reclen:24s
filename:.. d_info:2 d_reclen:16s
filename:account d_info:32037 d_reclen:24s
filename:mail d_info:31968 d_reclen:16s
filename:cache d_info:31960 d_reclen:24s
filename:db d_info:31961 d_reclen:16s
filename:. d_info:31938 d_reclen:16s
[root@phpos ~]#
程序正常执行!到此完了呵呵!!
转载于:https://blog.51cto.com/freshpassport/619710
LINUX下用C语言历遍目录 C语言列出目录相关推荐
- Linux下显示前10个占用空间最大的文件或目录命令
Linux下显示前10个占用空间最大的文件或目录命令 du -s * | sort -nr | head 转载于:https://blog.51cto.com/wapcn/933177
- linux循环目录下目录,Shell循环列出目录下所有文件或查找目录下包含指定字符串的文件...
一.循环列出目录下所有文件 #!/bin/bash function frfile() { local basefolder=$1 echo $basefolder #local filename f ...
- linux 的git的安装目录,Linux下Git安装及配置较详细-Go语言中文社区
1.下载git源码 2.解压安装包 --解压:tar -zxvf git-2.9.5.tar.gz --移直目标文件:mv /root/git-2.9.5 /usr/git-2.9.5(使用Xftp ...
- linux下BLE(低功耗蓝牙协议)C语言开发笔记(2)---ble蓝牙扫描-连接-读写
前言 bluez编译完后会生成很多命令行工具,比如gatttool.hcitool.bluetoothctl等,bluetoothctl的生成需要在configure的时候把--disable-tes ...
- Linux bash符号及含义,Linux下用bash命令执行名称中带有(符号的目录注意事项
***********************************************声明************************************************ 原创 ...
- LInux下 /bin、/sbin、/usr/sbin、/usr/bin 目录的作用和区别
这些目录都是存放命令的 bin为binary(二进制的,二元的)的简写 首先区别下/sbin和/bin: 从命令功能角度: /sbin 下的命令属于基本的系统命令,如shutdown,reboot,用 ...
- 为rm添加一个回收站|将linux下的rm命令改造成mv到指定的目录下
怕误删文件或目录,怕将辛辛苦苦写的东西删除! 就把rm换掉,简单几步做个回收站. 第一步创建回收站目录 mkdir -p ~/.trash //创建一个目录作为回收站,这里使用的是用户家目录下的.tr ...
- linux tomcat apr安装,Linux下Tomcat安装并开启APR模式-Go语言中文社区
环境: CentOS 7.6 64位 apache-tomcat-8.5.43.tar.gz 安装步骤: 1.通过Xftp软件上传安装包到/opt目录 2.解压,重命名移动到/usr/local下 [ ...
- linux下修改mysql数据存储_linux 更改mysql 数据存储目录
1.检查mysql数据库存放目录 mysql -u root -prootadmin #进入数据库 show variables like '%dir%'; #查看sql存储路径 (查看datadir ...
最新文章
- GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
- jQuery日期和时间插件(jquery-ui-timepicker-addon.js)中文破解版使用
- 顺序栈初始化,判空,进栈,出栈,打印
- ios 摇一摇不走响应方法_猫咪不和主人亲近?这几种方法让它变得黏人,赶都赶不走|猫|宠物猫|主人...
- Java一致性Hash算法的实现
- 视频编码器的智能化——AI辅助编解码的ASIC解决方案
- 实验室里人越来越少啊!
- 锻炼产品架构思维的4个维度
- Quartz教程:快速入门
- h5评论直接显示代码_全套H5教程免费学,让你0基础自学制作H5页面
- 很多工控产品都在用的 CODESYS 软件中被曝10个严重漏洞
- ubuntu安装deb软件包文件
- 如何用 10 句话激怒程序猿?
- 找出一批正整数中的最大偶数_c语言上机题库
- 固高控制卡Home捕获和Index捕获
- php页面中播放flv视频,页面播放flv格式视频[原创]
- 计算机实验室建设论证报告,计算机实验室实习报告-报告.doc
- 网线RJ45接口排线示意图(做网线备用)
- 本学期关于Android学习的总结
- solr定时实时重建索引和增量更新——sxt