快速业务通道

如何来写自己的ls命令

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-16

作者:王姗姗,华清远见嵌入式学院讲师.

很多实际证明,最好的学习方法是将相关的知识点应用到具体的例子中.这样我们不仅知道了原理,也学会了怎么应用.在学习文件IO时,我们可以尝试来写ls命令.在写ls命令之前,我们要明确ls命令能做些什么,然后才能知道要怎么去写ls命令.

其实ls的参数选项很多,大多也可以组合使用.我们明确实现自己的ls命令不是一步就到位的,要先学会怎样去实现它的基本功能.在这里,我以最简单的

ls –l (特定的文件)

作为例子里给大家分析下如何去写linux的命令.

我们观察终端的打印信息,怎样才能按照特定的格式去输出文件的这些信息?为了完成这个特定的功能我们要完成以下两步:

1.如何获取文件信息

2.如何按格式规则去输出文件信息

下面我们来做进一步分析:

第一步,如何来获取文件信息.
在C库中为我们提供了一组函数用来获取文件(普通文件,目录,管道,socket,字符,块)的属性.
它们的函数原型
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int stat(const char *path, struct stat *buf); /*提供文件名字,获取文件对应属性.*/
int fstat(int filedes, struct stat *buf); /*通过文件描述符获取文件对应的属性.*/

Empire CMS,phome.net

int lstat(const char *path, struct stat *buf);/* 连接文件描述命,获取文件属性.*/

这里要指出的stat和lstat不同点在于对于链接文件,stat显示的是链接文件指向的实际的文件的属性,也就是返回该符号链接引用文件的信息,而lstat显示的是由返回该符号链接的有关信息

参数: path:
文件路径名. filedes:文件描述词.
buf:是以下结构体的指针,用来描述文件对应的属性
struct stat
{
dev_t st_dev; /* 文件所在设备的标识 */
ino_t st_ino; /* 文件结点号 */
mode_t st_mode; /* 文件保护模式 */
nlink_t st_nlink; /* 硬连接数 */
uid_t st_uid; /* 文件用户标识 */
gid_t st_gid; /* 文件用户组标识 */
dev_t st_rdev; /* 文件所表示的特殊设备文件的设备标识 */
off_t st_size; /* 总大小,字节为单位 */
blksize_t st_blksize; /* 文件系统的块大小 */
blkcnt_t st_blocks; /* 分配给文件的块的数量,512字节为单元 */
time_t st_atime; /* 访问时间 */
time_t st_mtime; /* 修改时间 */
time_t st_ctime; /* 状态改变时间 */
};

函数实现如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <fcntl.h>
#include <stdio.h>
#include <pwd.h>
#include <grp.h>

Empire CMS,phome.net

#include <unistd.h>
int main(int argc,char *argv[])
{ if(argc < 2 )
{
printf("commend error!\n");
return -1;
}
int i;
struct stat buf;
ch

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号