如何用C实现linux下的ls命令_第1页
如何用C实现linux下的ls命令_第2页
如何用C实现linux下的ls命令_第3页
如何用C实现linux下的ls命令_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精选文库首先我讲一下写这篇东西的目的。我觉得对于很多linux新手。尤其是在自学的同学。最好的学习的方法就是通过具体的例子。通过一个实践的例子,在学习相关的知识点的同时,就把它们应用到这例子中。这样不仅知道了原理。也知道了怎么去应用。下面就开始用一个常用的命令”ls”开始。所有的东西都是从最基本的原理开始。一步步来教你怎么实践出一个命令 (一)ls命令简单介绍 第一步当然是要明白ls究竟是做什么的。如果你要做一个东西却不知道要用来干嘛。会不会很搞笑?所以下面就简单的介绍ls命令的作用和怎么使用 1.Ls可以列出文件名和文件的属性 在命令行输入ls: ls 命令.jpgLs的默认动作是找出当前所有文件的文件名。按字典排序后输出。Ls还能显示其他的信息。如果加上-l就会列出每个文件的详细信息。也叫ls的长格式:2. 列出指定目录或文件的信息 Linux系统中会有很多目录。每个目录中又会有很多文件。如果要列出一个非当前目录的内容或者是一个特定文件的信息,则需要在参数中给出目录名或文件名。如: ls /tmp /列出/tmp目录中各文件的文件名 ls docs /列出docs目录中各文件的属性 ls *.c /列出当前目录下与*.c匹配的文件,即当前目录下所有以.c为后缀的文件 3. 经常用到的命令行选项 ls -l 在前面已经提到过,-l就是输出文件详细的信息。也叫长格式; ls -a 列出的内容包含以“.“开头的让文件,即所谓有隐藏文件 ls lu 显示最后访问时间 ls t 输出时按时间排序 ls F 显示文件类型 ls 命令的参数选项非常多,大多也可以组合使用。所以还是比较复杂的。但是我们第一步要实现的就是它最基本的功能:列出当前目录下的所有文件或子目录。 (二)学习必备的知识 既然是列出文件和目录,那么肯定是和linux文件系统有关系的,所以要写ls命令,至少要对文件系统的基本原理有一定的了解。为了不至于使这个帖子内容过于复杂,我把这方面的知识介绍单独开了一个帖子: linux 文件系统详解 如果你对这些已经有所了解。就会知道linux下的文件都是以/为根目录的树型结构,虽然linux下有普通文件、目录文件、链接文件、设备文件、管道文件这几种类型。但链接文件、设备文件、管道文件都可以当做普通文件看待,那实际也就只要区分普通文件和目录文件这两种了。而目录文件的内容就是它所包含所有文件和子目录的一个列表,所以只要打开目录文件并读取对应目录块里的那个列表数据,就可以得到些目录下所有文件和子目录的名称了。其实这个流程简单,就是:打开目录-读取内容-显示文件名称-关闭打开的目录。用伪代码流程表示如下: Mani() Opendir While(readdir) Print d_name Closedir; 那么现在的问题是用什么函数去打开并读目录呢?又是怎么样来读出数据呢?这里介绍是的opendir 和readdir,但是可能对于一些新手来说,就算知道了函数名称也不一定知道怎么用。别急,下一步就是教你怎么去查相应函数的帮助资料。 linux下查看帮助手册的命令是man,关于man的详细介绍在这个帖子里我有详细介绍:linux 帮助手册页命令 man详解 如果对这方面还不是很清楚的可以先去学习一下。 好了,如果你已经明白man的用法,我们就开始查看opendir和readdir的用法 我们在命令行输入: # man 3 opendir解释: #include #include 这是必须包含的头文件 DIR *opendir(const char *name); 是函数原型;其中DIR * 表示是返回一个 DIR类型的指针,const char *name 是传入的参数 RETURN VALUE 是对返回值的说明。这里说明了如果有错误就返回NULL DESCRIPTION: opendir()用来打开参数name指定的目录,并返回DIR * 形态的目录流,DIR 并指向目录流的第一位解释: 头文件和opendir一样 函数原型:struct dirent * readdir(DIR * dir); 函数说明 readdir()返回参数dir目录流的下个目录进入点。 Struct dirent这一段是结构说明,基中解释分别下: d_ino 此目录进入点的inode d_off 目录文件开头至此目录进入点的位移 d_reclen _name的长度,不包含NULL字符 d_type d_name 所指的文件类型 d_name 文件名 (三)学完成代码 在当前目录创建新文件ls1.c;前输入以下内容 代码: #include #include #include void do_ls(char );main(int ac, char *av) if ( ac = 1 ) do_ls( . ); else while ( -ac ) printf(%s:n, *+av ); do_ls( *av ); void do_ls( char dirname )/* * list files in directory called dirname */ DIR *dir_ptr; /* the directory */ struct dirent *direntp; /* each entry */ if ( ( dir_ptr = opendir( dirname ) ) = NULL ) fprintf(stderr,ls1: cannot open %sn, dirname); else while ( ( direntp = readdir( dir_ptr ) ) != NULL ) printf(%sn, direntp-d_name ); closedir(dir_ptr); 保存并退出; (四)怎么编译和运行 编写好代码好就要编译了; linux的常用编译工具就是gcc了 #gcc o ls1 ls1.c 如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论