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的引用类型是这样,基本 ...
随机推荐
- Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信
这里我们用Windows下的shell来举例: from subprocess import * #因为是举例,就全部导入了 为了方便你理解,我们用一个很简单的一段代码来说明: 可以看见我们利用Pop ...
- Effective Java
Effective Java 创建和销毁对象---考虑用静态工厂方法代替构造器 构造器是创建一个对象实例最基本也最通用的方法,大部分开发者在使用某个class的时候,首先需要考虑的就是如何构造和初始化 ...
- 编译安装rabbitmq服务端
有一种方式是:下载rabbitmq-server-generic-unix压缩包,是不用编译的.是已经编译好的源码了 下面介绍编译源码安装 总括: 需要以下步骤: 1.安装erlange.因为 ...
- Skippr – 轻量、快速的 jQuery 幻灯片插件
Skippr 是一个超级简单的 jQuery 幻灯片插件.只是包括你的网页中引入 jquery.skippr.css 和 jquery.skippr.js 文件就能使用了.Skippr 能够自适应窗口 ...
- 【小贴士】虚拟键盘与fixed带给移动端的痛!
前言 今天来公司的主要目的就是研究虚拟键盘与fixed的问题,期间因为同事问起闭包与事件委托(阻止冒泡)相关问题,便穿插了一篇别的: [小贴士]工作中的”闭包“与事件委托的”阻止冒泡“,有兴趣的朋友可 ...
- js异步方式
node.js的例子 1.回调 创建 main.js 文件 var fs = require("fs"); fs.readFile('input.txt','utf8', func ...
- cell重用的几种方式
1.使用xib重用 //ios6 之后推荐大家使用的重用方式 //动态的使用self获得当前类名,来作为唯一的标示 NSString * identifier = NSStringFromClass( ...
- 2013最常用的NoSQL数据库
摘要:与关系数据库相比,每个NoSQL都有自己不同的适用场景,这里带大家盘点文档数据库.图数据库.键值数据存储.列存储数据库与内存数据网络等领域的常用的NoSQL. 在几年内,NoSQL数据库一直以性 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q88-Q91)
Question 88 You are designing a SharePoint 2010 application that stores data in a list named Base L ...
- [Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)
温馨提示 建议你先了解一下上一篇博文([Android L]SEAndroid增强Androd安全性背景概要及带来的影响)所讲的内容,先对SEAndroid窥个全貌,然后再继续本节内容. ...