my_ls
#include<stdio.h>
#include<dirent.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<pwd.h>
#include<grp.h>
#include<time.h>
/*
* $ls -la ~
* total 460
* drwxr-xr-x 31 linux linux 4096 10月 27 17:27 .
* drwxr-xr-x 3 root root 4096 9月 22 2012 ..
* -rw------- 1 linux linux 3126 10月 5 12:56 altvimrc
* -rw-rw-r-- 1 linux linux 102 10月 27 11:31 .apport-ignore.xml
* -rw------- 1 linux linux 20110 10月 27 15:47 .bash_history
* -rw-r--r-- 1 linux linux 220 9月 22 2012 .bash_logout
*/
int main(int argc, const char *argv[])
{
//打开目录流
//循环读取其中的文件名,
//将文件名使用stat()读取属性,并做相应解析
//写入到文件
DIR* dp=opendir(".");
struct dirent* Dir;
struct stat File;
while(Dir=readdir(dp)){
stat(Dir->d_name,&File);
char prot[11]={0};
//获取文件类型并解析
switch (File.st_mode&S_IFMT){
case S_IFSOCK:
strcpy(prot,"s");
break;
case S_IFLNK:
strcpy(prot,"l");
break;
case S_IFREG:
strcpy(prot,"-");
break;
case S_IFBLK:
strcpy(prot,"b");
break;
case S_IFDIR:
strcpy(prot,"d");
break;
case S_IFCHR:
strcpy(prot,"c");
break;
case S_IFIFO:
strcpy(prot,"p");
break;
}
//获取文件权限并解析
//处理属主权限
if(S_IRUSR==((File.st_mode&S_IRWXU)&S_IRUSR))
strcat(prot,"r");
else
strcat(prot,"-");
if(S_IWUSR==((File.st_mode&S_IRWXU)&S_IWUSR))
strcat(prot,"w");
else
strcat(prot,"-");
if(S_IXUSR==((File.st_mode&S_IRWXU)&S_IXUSR))
strcat(prot,"x");
else
strcat(prot,"-");
//处理属组权限
if(S_IRGRP==((File.st_mode&S_IRWXG)&S_IRGRP))
strcat(prot,"r");
else
strcat(prot,"-");
if(S_IWGRP==((File.st_mode&S_IRWXG)&S_IWGRP))
strcat(prot,"w");
else
strcat(prot,"-");
if(S_IXGRP==((File.st_mode&S_IRWXG)&S_IXGRP))
strcat(prot,"x");
else
strcat(prot,"-");
//处理其他权限
if(S_IROTH==((File.st_mode&S_IRWXO)&S_IROTH))
strcat(prot,"r");
else
strcat(prot,"-");
if(S_IWOTH==((File.st_mode&S_IRWXO)&S_IWOTH))
strcat(prot,"w");
else
strcat(prot,"-");
if(S_IXOTH==((File.st_mode&S_IRWXO)&S_IXOTH))
strcat(prot,"x");
else
strcat(prot,"-");
//获取文件硬链接数
//获取文件属主的名
struct passwd* pwd=getpwuid(File.st_uid);
//获取文件属主的组名
struct group* grp=getgrgid(File.st_gid);
//获取文件的大小
//获取文件的mtime
struct tm* myTime;
myTime=localtime(&File.st_mtime);
printf("%s %d %s %s %5ld %d月 %d %02d:%02d %s\n",
prot,
File.st_nlink,
pwd->pw_name,
grp->gr_name,
File.st_size,
myTime->tm_mon+1,
myTime->tm_mday,
myTime->tm_hour,
myTime->tm_min,
Dir->d_name
);
}
return 0;
}
my_ls的更多相关文章
- (笨方法)利用stat函数实现ls -l filename
学习了一段时间的Linux了,但是我感觉我做不出来啥子,后头选择利用系统IO函数实现命令,先从ls走起吧.先来看看ls -l filename给我们显示了什么吧 : 可以看到,一共八项:文件类型.用户 ...
- 【操作系统】C语言编写的FAT16文件系统
[操作系统]C语言编写的FAT16文件系统 这是操作系统的期末课程设计作业之一,主要功能是在物理内存中虚拟出一个1M大小的FAT16的文件系统,然后把它读入内存中,进行具体的文件操作,具体的实用性不大 ...
- python传参
写在前面 Python唯一支持的参数传递方式是『共享传参』(call by sharing) 多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Java的引用类型是这样,基本 ...
- Python传入参数的几种方法
写在前面 Python唯一支持的参数传递方式是『共享传参』(call by sharing) 多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Java的引用类型是这样,基本 ...
随机推荐
- Eclipse功能集合
大家好,这篇博客的目的是总结一下Eclipse这个软件中一些不为常用的功能.与大家分享.谢谢~ 1.利用one hour看了一下Eclipse的使用,用two hour写了这篇blog. 2.在现实项 ...
- 十一个行为模式之责任链模式(Responsible Chain Pattern)
定义: 将具有相同接口的责任类串行在一起,解耦请求的发送者和处理者.沿着这条链进行请求,直到有对象处理它为止. 结构图: Handler:抽象处理类,定义了所有责任类处理方法的接口,不同的处理方法在子 ...
- 重新初始化 VS2010
开始->所有程序->Microsoft Visual Stdio 2005->Visual Stdio Tools->Visual Stdio 2005 命令提示 这时会弹出一 ...
- 使用 jQuery & CSS3 实现优雅的手风琴效果
手风琴效果常用于切换显示一组内容,这种方式既可以节省网页空间又可以有动画效果.今天,我们将创造一个优雅的手风琴内容效果.这个想法是有悬停时滑出一些垂直手风琴标签.我们将添加一些 CSS3 属性来提升外 ...
- git node(&npm)安装
1.git 下载地址:https://git-scm.com/download/win 2.node 下载地址:https://nodejs.org/en/download/ 安装node会自带npm ...
- Sublime Text 3汉化中文版
Sublime Text 3汉化中文版是Sublime Text2的升级版.Sublime Text 是一款流行的文本编辑器软件,有点类似于TextMate,跨平台,可运行在Linux,Windows ...
- 三分钟玩转jQuery.noConflict()
jQuery是目前使用最广泛的前端框架之一,有大量的第三方库和插件基于它开发.为了避免全局命名空间污染,jQuery提供了jQuery.noConflict()方法解决变量冲突.这个方法,毫无疑问 ...
- Atitit.提升电子商务安全性 在线充值功能安全方面的设计
Atitit.提升电子商务安全性 在线充值功能安全方面的设计 1. 防止dataservcie对充值订单表的直接改写,只能通过api,不能通过sql1 1.1. Order_id的安全取值,注入检测1 ...
- Android自定义ScrollView分段加载大文本数据到TextView
以下内容为原创,转载时请注明链接地址:http://www.cnblogs.com/tiantianbyconan/p/3311658.html 这是我现在碰到的一个问题,如果需要在TextView中 ...
- mysql 时间函数转换
1 NOW() //当前时间 2 SYSDATE() //当前时间 3 CURRENT_TIMESTAMP 4 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的 ...