(被考了一题遍历目录,连需要的系统库函数我都不知道...打击中...)
小羽给了一个答案:
#include<stdio.h>
#include<dirent.h>
int main(int argc,char **argv)
{
  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);
}
知道需要dirent.h这个头文件,里面有几个函数还有dir目录结构体的定义。
在网上找了篇写的还蛮详细的,特此转载~~
LINUX下历遍目录的方法一般是这样的
打开目录-》读取-》关闭目录
相关函数是
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语言列出目录相关推荐

  1. Linux下显示前10个占用空间最大的文件或目录命令

    Linux下显示前10个占用空间最大的文件或目录命令 du -s * | sort -nr | head 转载于:https://blog.51cto.com/wapcn/933177

  2. linux循环目录下目录,Shell循环列出目录下所有文件或查找目录下包含指定字符串的文件...

    一.循环列出目录下所有文件 #!/bin/bash function frfile() { local basefolder=$1 echo $basefolder #local filename f ...

  3. 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 ...

  4. linux下BLE(低功耗蓝牙协议)C语言开发笔记(2)---ble蓝牙扫描-连接-读写

    前言 bluez编译完后会生成很多命令行工具,比如gatttool.hcitool.bluetoothctl等,bluetoothctl的生成需要在configure的时候把--disable-tes ...

  5. Linux bash符号及含义,Linux下用bash命令执行名称中带有(符号的目录注意事项

    ***********************************************声明************************************************ 原创 ...

  6. LInux下 /bin、/sbin、/usr/sbin、/usr/bin 目录的作用和区别

    这些目录都是存放命令的 bin为binary(二进制的,二元的)的简写 首先区别下/sbin和/bin: 从命令功能角度: /sbin 下的命令属于基本的系统命令,如shutdown,reboot,用 ...

  7. 为rm添加一个回收站|将linux下的rm命令改造成mv到指定的目录下

    怕误删文件或目录,怕将辛辛苦苦写的东西删除! 就把rm换掉,简单几步做个回收站. 第一步创建回收站目录 mkdir -p ~/.trash //创建一个目录作为回收站,这里使用的是用户家目录下的.tr ...

  8. linux tomcat apr安装,Linux下Tomcat安装并开启APR模式-Go语言中文社区

    环境: CentOS 7.6 64位 apache-tomcat-8.5.43.tar.gz 安装步骤: 1.通过Xftp软件上传安装包到/opt目录 2.解压,重命名移动到/usr/local下 [ ...

  9. linux下修改mysql数据存储_linux 更改mysql 数据存储目录

    1.检查mysql数据库存放目录 mysql -u root -prootadmin #进入数据库 show variables like '%dir%'; #查看sql存储路径 (查看datadir ...

最新文章

  1. GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
  2. jQuery日期和时间插件(jquery-ui-timepicker-addon.js)中文破解版使用
  3. 顺序栈初始化,判空,进栈,出栈,打印
  4. ios 摇一摇不走响应方法_猫咪不和主人亲近?这几种方法让它变得黏人,赶都赶不走|猫|宠物猫|主人...
  5. Java一致性Hash算法的实现
  6. 视频编码器的智能化——AI辅助编解码的ASIC解决方案
  7. 实验室里人越来越少啊!
  8. 锻炼产品架构思维的4个维度
  9. Quartz教程:快速入门
  10. h5评论直接显示代码_全套H5教程免费学,让你0基础自学制作H5页面
  11. 很多工控产品都在用的 CODESYS 软件中被曝10个严重漏洞
  12. ubuntu安装deb软件包文件
  13. 如何用 10 句话激怒程序猿?
  14. 找出一批正整数中的最大偶数_c语言上机题库
  15. 固高控制卡Home捕获和Index捕获
  16. php页面中播放flv视频,页面播放flv格式视频[原创]
  17. 计算机实验室建设论证报告,计算机实验室实习报告-报告.doc
  18. 网线RJ45接口排线示意图(做网线备用)
  19. 本学期关于Android学习的总结
  20. solr定时实时重建索引和增量更新——sxt

热门文章

  1. python生成简单的FTP弱口令扫描
  2. sass的继承,混合宏,占位符的用法总结
  3. Web APi之消息处理管道(五)
  4. 四个Webix实例:生成多种类型的JavaScript列表
  5. linux shell 字符串操作(长度,查找,替换)详解
  6. MyBatis Like
  7. Linux下查看显示器输出状态以及修改显示器工作模式(复制 or 扩展)
  8. 提高性能的Varnish缓存方案
  9. dmalloc 原文 翻译整理
  10. 程序员面试题精选100题(61)-数对之差的最大值