c语言实现ls_l的功能.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言实现ls_l的功能

Linux下C语言实现ls -l功能 需求:用ls -l显示文件夹下所有的文件及属性 分析:1 用ls显示文件夹下的所有文件,首先用opendir打开文件夹,再用readdir读取文件夹里面的文件,最后closedir关闭文件夹。 2 用ls -l比较复杂,打印出来的内容包括:(文件属性+文件名) 由以下几部分构成——文件的类型(d——目录文件 -——文本文件...)文件的可执行权限 所属组的权限,其它组的权限 硬链接数 文件拥有者 文件拥有者组 文件大小 时间 文件名 解决方案: 1. 要想实现ls -l就得知道通过什么系统调用获取文件信息,首先自然是要通过man来查找相关的系统调用。 man -k file|grep status man -k file|grep information man -k file|grep info 通过上面的搜索就可以得到stat这个系统调用获取文件属性。 man 2 stat获取系统调用的详细使用方法: #include sys/types.h #include sys/stat.h #include unistd.h struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of hard links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device ID (if special file) */ off_t st_size; /* total size, in bytes */ blksize_t st_blksize; /* blocksize for file system I/O */ blkcnt_t st_blocks; /* number of 512B blocks allocated */ time_t st_atime; /* time of last access */ time_t st_mtime; /* time of last modification */ time_t st_ctime; /* time of last status change */ }; 只要通过相应字段进行格式处理就行啦! 2.权限处理:st_mode就是文件的权限部分。St_mode本身就是一个16位的二进制,前四位是文件的类型,紧接着三位是特殊权限,左后九位就是ls -l列出来的九个权限。 linux本身提供了很多测试宏来测试文件的类型的 #define __S_IFMT 0170000 /* These bits determine file type. */ /* File types. */ #define __S_IFDIR 0040000 /* Directory. */ #define __S_IFCHR 0020000 /* Character device. */ #define __S_IFBLK 0060000 /* Block device. */ #define __S_IFREG 0100000 /* Regular file. */ #define __S_IFIFO 0010000 /* FIFO. */ #define __S_IFLNK 0120000 /* Symbolic link. */ #define __S_IFSOCK 0140000 /* Socket. */ 利用上面的测试宏就可以判断文件的类型,至于文件的权限部分可以使用掩码的方式来处理。 具体代码

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档