c语言下实现ls命令.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下实现ls命令 (仅适用于ls -a pathname ; ls -l pathname; ls pathname ) ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单。通过ls命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等,ls命令在日常的linux操作中用的很多 -a选项:表示显示该目录下的所有文件,包括隐藏文件。 -l选项:表示显示文件的详细信息,包括访问权限,文件大小…… 例如:ls –a / ls –l / 1)主要构造的函数 void error(const char *err_string, int line); //错误处理函数,打印错误所在行数和错误信息 void Demonstrate_attribute(struct stat buf, char *name); //获得文件属性并打印 void Demonstrate_single(char *name); //输出文件名,命令没有-l选项。输出文件名要保持上下对齐 void Demonstrate(int flag, char *pathname); //根据命令行参数和文件路径名来显示目标文件 void Demonstrate_dir(int flag_parameter, char *path); //为显示某个目录下的文件做准备 2)函数流程 (1)获取该目录下文件的总数和最长文件名 (2)若获该目录下所有文件的文件名,存放于变量filenames中 (3)使用冒泡法对文件名按字母顺序存储于filenames中 (4)调用Demonstrate()函数来显示每个文件信息 3)程序中主要的结构体: 参数struct stat *buf是一个保存文件状态信息的结构体 A):struct stat { dev st_ dev;//文件设备号 ino_t st_ino;//文件的i-node mode_t st_mode;//文件类型和存储权限 nlink_t st_nlink;//连到该文件的硬链接数目。 uid_t st_uid;//文件所有者的用户id gid_t st_gid;//文件所有者的组id dev_t st_rdev;//若此文件为设备文件,则为其设备编号 off_t st_size;//文件大小 blksize_t st_blksize;//文件系统的I/O缓冲区大小 blkcnt_t st_blocks;//占用文件区块的个数 time_t st_atime;//文件最近一次被访问的时间 文件最后一次被修改的时间 time_t st_ctime;//文件最近一次被更改的时间 } 其中,对于st_mode包含的文件类型信息,POSIX标准定义了一系列的宏: S_ISLNK(st_mode)//判断是否为符号链接 S_ISREG(st_mode)//判断是否为一般文件 S_ISDIR(st_mode)//判断是否为目录文件 S_ISCHR(st_mode)//判断是否为字符设备文件 S_IBLK(st_mode)//判断是否为块设备文件 S_ISFIFO(st_mode)//判断是否为先进先出FIFO S_ISFOCK(st_mode)//判断是否为socket B): struct passwd *psd; //从该结构体中获取文件所有者的用户名 C): struct group *grp; //从该结构体中获取文件所有者所属组的组名 4)心得体会 本次课程设计我写的是Linux下的ls命令,通过这次课程设计,不仅使我对ls命令有了更深一层的认识,还认识到了系统提供的命令实现的途径和方法。之前总是使用系统命令,如今自己编程实现了一些命令,每次使用系统提供的命令和调用自己编写的命令感觉大不相同。 5)具体解析与详细代码:51099 #include stdio.h #include stdlib.h #include string.h #include time.h #include sys/stat.h #include unistd.h #include sys/types.h #include linux/limits.h #include dirent.h #include grp.h #include pwd.h #include errno.h #define PARAMETER_NONE 0 //无参数 #define PARAMETER_A 1 // -a:显示所有文件 #define PARAMETER_L 2 // -l:一行显示一个文件的详细信息 #

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档