c语言实现ls -l的功能

c语言实现ls -l的功能

ID:36970088

大小:58.50 KB

页数:7页

时间:2019-05-16

c语言实现ls -l的功能_第1页
c语言实现ls -l的功能_第2页
c语言实现ls -l的功能_第3页
c语言实现ls -l的功能_第4页
c语言实现ls -l的功能_第5页
资源描述:

《c语言实现ls -l的功能》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Linux下C语言实现ls-l功能需求:用ls-l显示文件夹下所有的文件及属性分析:1用ls显示文件夹下的所有文件,首先用opendir打开文件夹,再用readdir读取文件夹里面的文件,最后closedir关闭文件夹。2用ls-l比较复杂,打印出来的内容包括:(文件属性+文件名)由以下几部分构成——文件的类型(d——目录文件-——文本文件...)文件的可执行权限所属组的权限,其它组的权限硬链接数文件拥有者文件拥有者组文件大小时间文件名解决方案:1.要想实现ls-l就得知道通过什么系统调用获取文件信息,首先自然是要通过man来查找相关的系统调

2、用。man-kfile

3、grepstatusman-kfile

4、grepinformationman-kfile

5、grepinfo通过上面的搜索就可以得到stat这个系统调用获取文件属性。man2stat获取系统调用的详细使用方法:#include#include#includestructstat{dev_tst_dev;/*IDofdevicecontainingfile*/ino_tst_ino;/*inodenumber*/mode_tst_mode;/*prote

6、ction*/nlink_tst_nlink;/*numberofhardlinks*/uid_tst_uid;/*userIDofowner*/gid_tst_gid;/*groupIDofowner*/dev_tst_rdev;/*deviceID(ifspecialfile)*/off_tst_size;/*totalsize,inbytes*/blksize_tst_blksize;/*blocksizeforfilesystemI/O*/blkcnt_tst_blocks;/*numberof512Bblocksallocated*

7、/time_tst_atime;/*timeoflastaccess*/time_tst_mtime;/*timeoflastmodification*/time_tst_ctime;/*timeoflaststatuschange*/};只要通过相应字段进行格式处理就行啦!2.权限处理:st_mode就是文件的权限部分。St_mode本身就是一个16位的二进制,前四位是文件的类型,紧接着三位是特殊权限,左后九位就是ls-l列出来的九个权限。linux本身提供了很多测试宏来测试文件的类型的#define__S_IFMT0170000/*The

8、sebitsdeterminefiletype.*//*Filetypes.*/#define__S_IFDIR0040000/*Directory.*/#define__S_IFCHR0020000/*Characterdevice.*/#define__S_IFBLK0060000/*Blockdevice.*/#define__S_IFREG0100000/*Regularfile.*/#define__S_IFIFO0010000/*FIFO.*/#define__S_IFLNK0120000/*Symboliclink.*/#def

9、ine__S_IFSOCK0140000/*Socket.*/利用上面的测试宏就可以判断文件的类型,至于文件的权限部分可以使用掩码的方式来处理。具体代码如下:vimfile_mode.c#include"list.h"//man2stat可看到文件基本属性voidfile_mode(structstat*buf){inti;charbuff[10]={"----------"};switch(buf->st_mode&S_IFMT)//按位&获取文件基本属性{caseS_IFIFO:buff[0]='f';break;caseS_IFDIR:

10、buff[0]='d';break;caseS_IFSOCK:buff[0]='s';break;caseS_IFBLK:buff[0]='b';break;caseS_IFLNK:buff[0]='l';break;}if(buf->st_mode&S_IRUSR)buff[1]='r';if(buf->st_mode&S_IWUSR)buff[2]='w';if(buf->st_mode&S_IXUSR)buff[3]='x';if(buf->st_mode&S_IRGRP)buff[4]='r';if(buf->st_mode&S_IW

11、GRP)buff[5]='w';if(buf->st_mode&S_IXGRP)buff[6]='x';if(buf->st_mode&S_IROTH)buff[7

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。