c语言下实现ls命令.docx
《c语言下实现ls命令.docx》由会员分享,可在线阅读,更多相关《c语言下实现ls命令.docx(13页珍藏版)》请在咨信网上搜索。
1、Linux下实现Is命令(仅适用于 Is -a pathname ; Is T pathname; Is pathname )Is命令就是list的缩写,缺省下Is用来打印出当前目录的清单,如果I S指定其他目录,那么就会显示指定目录里的文件及文件夹清单。通过Is命令 不仅可以查看linux文件夹包含的文件.而且可以查看文件权限(包括目录、文 件夹、文件权限),查看目录信息等等,Is命令在日常的linux操作中用的很多-a选项:表示显示该目录下的所有文件,包括隐藏文件。-I选项:表示显示文件的详细信息,包括方问权限,文件大小 例如:Is -a /Is - I /1)主要构造的函数void er
2、ror (const char *err string, int line);错误处理函数,打印错误所在行数和错误信息void Demonstrate attribute (struct stat buf, char *name);获得文件属性并打印void Demonstrate si ng Ie (char *name);输出文件名,命令没有-1选项。输出文件名要保持上下对齐void Demonstrate(int flag, char *pathname);根据命令行参数和文件路径名来显示目标文件void Demonstrate dir (int 千lag parameter, char
3、 *path);为显示某个目录下的文件做准备2)函数流程(1)获取该目录下文件的总数和最长文件名(2)假设获该目录下所有文件的文件名,存放于变量f i lenames中(3)使用冒泡法对文件名按字母顺序存储于fi lenanes中(4)调用Demonstrate。函数来显示每个文件信息3)程序中主要的结构体:参数struct stat *buf是一个保存文件状态信息的结构体A):struct stat dev st dev;文件设备号ino t st ino;文件的 i-nodemode t st mode;文件类型和存储权限nl ink t st nI ink;连到该文件的硬链接数目。uid
4、 t st uid:文件所有者的用户idgid t st Mid;文件所有者的组iddev 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 nxxJe包含的文件类型信息,P0SIX标准定义了一系列的宏:S ISLNK (st mode) 判断是否为符号链接S_ISREG (
5、st_mode) 判断是否为一般文件/*用Istat而不是stat以方便解析链接文件*/if ( I stat (pathname, &buf) = -1 ) I stat返回的是符号链接文件文件本身 的4犬态信息(error (stat, _LINE_J ;1 switch (flag)(case PARAMETER NONE: 没有一I选项if (name0 !=.)(Demonstrate_s ingle (name); break;case PARAMETER A: / -a:显示包括隐藏文件在内的所有文件Demonstrate single(name);break;case PARA
6、METER L: -1:每个文件单独占一行,显示文件的详细属性信息if (name0 !=)(Demonstrate attr ibute(buf, name);printfC %-sn, name);1break;case PARAMETER A + PARAMETER L: 同时有-a 和选项的情况Demonstrate attr ibute(buf, name);printfC 5nsn, name);break;default:break;1/*为显示目录下的文件做准备*/void Demonstrate_dir(int flag_parameter, char *path)(DIR*
7、dir;struct d i rent *ptr;int count = 0;char fi Ienames256 PATH MAX + 1 , tenpPATH_MAX + 1;获取该目录下文件总数和最长的文件名dir = opendir (path);if (dir = NULL) error (opendir, _LINE_);1whi Ie (ptr 二 readdir (dir) != NULL) if (g maxlen d name)r maxlen = str Ien (ptr-d_name);count+;1c I osed i r (d i r);if (count 256
8、)error (too many f i les under this dir,_LINE_);int i, i, len = str I en (path);获取该目录下所有的文件名dir = opendir (path);for (i = 0; i d name);f i Ienamesi len + str Ien (ptr-d_name)二0;)使用冒泡法对文件名进行排序,排序后文件名按字母顺序存储于千i lenans for (i = 0; i count-1; i+)for (j = 0; j 0 )(strcpv(tenp.fi Ienamesj + 1);temp str I
9、en (f i I enames i + 1)=0;strcpv(f i Ienamesi + 1, f i Ienamesj);fi Ienamesj + 1 strlen(fi Ienamesj) = 0;strcpv(f i Ienames j, tew):f i Ienamesj str Ien(terrp) = 0;1)for (i = 0: i count; i+)Demonstrate (flagjarameter, fiIenamesi);I I r (,如果命令行$没有-|选项,打印一个换行符if( (flag parameter & PARAMETER_L) = 0)pri
10、ntf (Xn1);)附录资料:不需要的可以自行删除Abstract: Based on the comprehensive analysis on the plastic parts structure service requirement, mounding quality and mould menu factoring cost. A corresponding injection mould of internal side core pulling was designed. By adopting the multi-direction and multi-combinatio
11、n core-pulling. A corresponding injection mould of internal side core pulling was designed, the working process of the mould was introducedC语言详解-枚举类型注:以下全部代码的执行环境为VC+ 6.0在程序中,可能需要为某地整数定义一个别名,我们可以利用预处理指令#define来完成这 项工作,您的代码可能是:# dcfinc MON 1define TUE 2# define WED 3define THU 4# define FRI 5define S
12、AT 6# define SUN 7在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。1 .定义一种新的数据类型一枚举型以下代码定义了这种新的数据类型一枚举型enum DAYMON=LTUE, WED, THU, FRI, SAT, SUN;(I)枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号, 隔开。DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。(3)第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。(4)可以人为设定枚举成员的值,从而自定义某个范围内的整数。(5)枚举型是预处理
13、指令#define的替代“(6)类型定义以分号;结束。2 .使用枚举类型对变量进行声明新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的数据类型,如:整型int, 单精度浮点型float,双精度浮点型double,字符型char,短整型short等等。用这些基本数据 类型声明变量通常是这样:char a; 变量a的类型均为字符型char charletter;inix,y,z; 变量x,y和z的类型均为整型int int number;double m, n;double result; 变量result的类型为双精度浮点型double 既然枚举也是一种数据类型,那么它和基本数据类型
14、一样也可以对变量进行声明。方法:枚举类型的定义和变量的声明分开enum DAY (MON= 1, TUE, WED. THU, FRI, SAT, SUN ; enum DAY yesterday;enum DAY today;enum DAY tomorrow; 变量(omorrow 的类型为枚举型 enum DAYenum DAY good_day, bad_day; 变量 good_day 和 bad_day 的类型均为枚举型 enum DAY 方法二:类型定义与变量声明同时进行:enum跟第一个定义不同的是,此处的标号DAY省略,这是允许的。 Saturday, sunday = 0,
15、 monday, luesday, Wednesday, thursday, friday workday; 变量workday的类型为枚举型enum DAYenum week Mon=l, Tue, Wed. Thu. Fri Sal, Sun days; 变量 days 的类型为枚举型 enum weekenum BOOLEAN false, true end_flag, malch_flag; 定义枚举类型并声明了两个枚举型变 量方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明: typcdef enuni workday Saturday, sunday =
16、 0, monday, tuesday, Wednesday, thursday, friday workday; 此处的workday为枚举型enum workday的别名workday today, tomorrow; 变量 today 和 tomorrow 的类型为枚举型 workday,也即 enum workdayenurn workday 中的 workday 可以省略:typcdcf cnum Saturday, sunday = 0, monday, tuesday, Wednesday, thursday, Friday workday; /此处的workday为枚举型cnu
17、m workday的别名workday today, tomorrow; 变量 today 和 tomorrow 的类型为枚举型 workday,也即 enum workday 也可以用这种方式:typedef enum workday |Saturday, sunday = 0, inonday, tuesday, Wednesday, thursday, friday1;workday today, tomorrow; 变量 today 和 tomorrow 的类型为枚举型 workday,也即 enum workday注意:同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同
18、名的命名常 量。错误例如如下所示:错误声明一:存在同名的枚举类型typedef enum Wednesday,thursday, friday workday;typedef enum WEEK (Saturday,sunday = 0, nionday, workday;错误声明二:存在同名的枚举成员typedef enum Wednesday,thursday, friday workday;typedef enum WEEK Wednesday, sunday = 0, monday, workday_2;.使用枚举类型的变量2.1 对枚举型的变量赋值。实例将枚举类型的赋值与基本数据类型
19、的赋值进行了比照: 方法一:先声明变量,再对变量赋值#include/*定义枚举类型*/enum DAY MON=1,TUE, WED, THU, FRI, SAT, SUN ;void main()(/*使用基本数据类型声明变显,然后对变显赋值*/int x, y, z;x= 10;y = 20;z = 30;/*使用枚举类型声明变量,再对枚举型变量赋值*/enum DAY yesterday, today, tomorrow;yesterday = MON;today = TUE;tomorrow = WED;printf(%d %d %d n, yesterday, today, tom
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实现 ls 命令
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。