通过函数实现ll命令

本文介绍了如何使用C语言编写代码来实现类似于Linux系统中`ll`命令的功能。通过解析`struct stat`结构体,提取文件的权限、硬链接数、属主、组名、大小和修改时间,并用适当的格式输出。主要涉及`stat()`、`getpwuid()`和`getgrgid()`等函数的使用。
摘要由CSDN通过智能技术生成

ll命令显示如下:

[liupc@ubuntu ~/Projects]$>ll

total 40

drwxrwxr-x  5 liupc liupc 4096 May 15 06:23 ./

drwxr-xr-x 15 liupc liupc 4096 May 15 05:22 ../

drwxrwxr-x  2 liupc liupc 4096 May 12 11:07 0513/

-rw-rw-r--  2 liupc liupc  718 May 15 05:22 111

drwxrwxr-x  2 liupc liupc 4096 May 12 11:02 20160512/

-rw-rw-r--  2 liupc liupc  718 May 15 05:22 Depth_Search.c

结构体stat的定义为:

 struct stat {          

 dev_t          st_dev;          //如果是设备,返回设备表述符,否则为0.     

 ino_t           st_ino;          // i节点号。

 mode_t       st_mode;       //文件类型。无符号短整型 。两个字节存储文件类型和权限。           

 nlink_t        st_nlink;       //链接数。指的是硬链接的链接数。

 uid_t           st_uid;          //属主ID             

 gid_t           st_gid;          //组ID            

 dev_t          st_rdev;        //设备类型

 off_t           st_size;         //文件大小,字节表示 

 blksize_t     st_blksize;    //块大小

 blkcnt_t      st_blocks;     //块数 

 time_t         st_atime;      //最后访问时间         time_t存放的是距离1970.1.1的秒数。

 time_t         st_mtime;     //最后修改时间

 time_t         st_ctime;      //最后权限修改时间 

 }buf; 

将stat结构体转换成ll的格式的难点分析:

权限:

printf("%x",buf.st_node);    //输出:41fd.即0100 0001 1111 1101。可以看出文件类型为:4;权限为:775。

硬链接数:

printf("%d",buf.st_nlink);   //输出:5。与ll命令显示相同。

用户名:

printf("%d",buf.st_uid);     //输出uid:1000,通过查看/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值