homework 张一刚
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<time.h>
#include<pwd.h>
#include<grp.h>
#include<dirent.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>
int l_stat(char * p1,char * p);
void a_stat(char * p);
void i_stat(char * p);
void e_dir(char * p);
static long numbers;
//判断是否隐藏文件
int is_spot(const char * p)
{
if(*p == '.')
return ;
else
return ;
}
void e_dir(char * p)
{
struct stat mystat;
DIR * dir;
struct dirent * pd;
int cent = lstat(p,&mystat);
if((mystat.st_mode & S_IFMT) == S_IFDIR)
{
dir = opendir(p);
if(dir == NULL)
{
if(errno)
{
perror("opendir()");
return;
}
}
while()
{
pd = readdir(dir);
if(pd == NULL)
{
if(errno)
{
perror("readdir()");
return ;
}
break;
}
l_stat(p,pd->d_name);
}
closedir(dir);
}
else
l_stat(".",p);
printf("%ldk\n",numbers/);
return ;
}
void h_stat(char * p)
{
struct stat mystat;
DIR * dir;
struct dirent * pd;
int cent = stat(p,&mystat);
if((mystat.st_mode & S_IFMT) == S_IFDIR)
{
dir = opendir(p);
if(dir == NULL)
{
if(errno)
{
perror("opendir()");
return;
}
}
while()
{
pd = readdir(dir);
if(pd == NULL)
{
if(errno)
{
perror("readdir()");
return ;
}
break;
}
if(is_spot(pd->d_name) == )
printf("%s \n",pd->d_name);
}
closedir(dir);
}
else
printf("%s \n",p);
return;
}
int main(int argc,char ** argv)
{
if(argc < )
return ;
char * op = "-laih";
int s;
while()
{
s = getopt(argc,argv,op);
if(s == -)
break;
switch(s)
{
case 'l':e_dir(argv[]); break;
case 'a':a_stat(argv[]);break;
case 'i':i_stat(argv[]);break;
case 'h':h_stat(argv[]);break;
case '?':printf("无该选项\n");break;
// case 1 : printf("%s\n",argv[2]);break;
default:break;
}
}
return ;
}
void i_stat(char * p)
{
struct stat mystat;
int nodenumber;
DIR * dir;
struct dirent * pd;
int cent = stat(p,&mystat);
if((mystat.st_mode & S_IFMT) == S_IFDIR)
{
dir = opendir(p);
if(dir == NULL)
{
if(errno)
{
perror("opendir()");
return;
}
}
while()
{
pd = readdir(dir);
if(pd == NULL)
{
if(errno)
{
perror("readdir()");
return ;
}
break;
}
if(is_spot(pd->d_name) == )
{
printf("%ld ",pd->d_ino);
printf("%s\n",pd->d_name);
}
}
closedir(dir);
}
else
{
printf("%ld ",mystat.st_ino);
printf("%s\n",p);
}
}
void a_stat(char * p)
{
struct stat mystat;
DIR * dir;
struct dirent * pd;
int cent = stat(p,&mystat);
if((mystat.st_mode & S_IFMT) == S_IFDIR)
{
dir = opendir(p);
if(dir == NULL)
{
if(errno)
{
perror("opendir()");
return;
}
}
while()
{
pd = readdir(dir);
if(pd == NULL)
{
if(errno)
{
perror("readdir()");
return ;
}
break;
}
printf("%s ",pd->d_name);
}
}
else
printf("%s ",p);
}
// 追加/获得路径
char * dir_cat(const char * p,const char * buf)
{
char * buf_cat = malloc();
memset(buf_cat,'\0',);
strcpy(buf_cat,p);
buf_cat[strlen(buf_cat)] = '/';
strcat(buf_cat,buf);
return buf_cat;
}
//获取文件属性
int l_stat(char * p,char * p_name)
{
struct tm * tmp = NULL;
struct passwd * pwd = NULL;
struct group * wd = NULL;
struct stat mystat;
char buf[];
char * p1;
int cnt;
p1 = dir_cat(p,p_name);
cnt = stat(p1,&mystat);
if(cnt == -)
{
perror("stat()");
return -;
}
//判断是不是隐藏文件
if(is_spot(p_name) == )
{
numbers += mystat.st_blocks;
switch(mystat.st_mode & S_IFMT)
{
case S_IFREG: putchar('-');break;
case S_IFBLK: putchar('b');break;
case S_IFDIR: putchar('d');break;
case S_IFCHR: putchar('c');break;
case S_IFIFO: putchar('p');break;
default:break;
}
//拥有者
if(mystat.st_mode & S_IRUSR)
putchar('r');
else
putchar('-');
if(mystat.st_mode & S_IWUSR)
putchar('w');
else
putchar('-');
if(mystat.st_mode & S_IXUSR)
putchar('x');
else
putchar('-');
//所属组
if(mystat.st_mode & S_IRGRP)
putchar('r');
else
putchar('-');
if(mystat.st_mode & S_IWGRP)
putchar('w');
else
putchar('-');
if(mystat.st_mode & S_IXGRP)
putchar('x');
else
putchar('-');
//其他
if(mystat.st_mode & S_IROTH)
putchar('r');
else
putchar('-');
if(mystat.st_mode & S_IWOTH)
putchar('w');
else
putchar('-');
if(mystat.st_mode & S_IXOTH)
putchar('x');
else
putchar('-');
//硬链接个数
printf("%2ld ",mystat.st_nlink);
//文件拥有者名字
pwd = getpwuid(mystat.st_uid);
printf("%s ",pwd->pw_name);
//文件所属组
wd = getgrgid(mystat.st_gid);
printf("%s ",wd->gr_name);
//总字节个数
printf("%5ld ",mystat.st_size);
//获取时间
tmp = localtime(&mystat.st_mtim.tv_sec);
strftime(buf,,"%m 月 %d %H:%M",tmp);
printf("%s ",buf);
//文件名
printf("%s\n",p_name);
}
return ;
}
homework 张一刚的更多相关文章
- HDU 1789 Doing Homework again(贪心)
Doing Homework again 这只是一道简单的贪心,但想不到的话,真的好难,我就想不到,最后还是看的题解 [题目链接]Doing Homework again [题目类型]贪心 & ...
- HDU 1074 Doing Homework (dp+状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:学生要完成各科作业, 给出各科老师给出交作业的期限和学生完成该科所需时间, 如果逾期一 ...
- HUST 1555 A Math Homework
1555 - A Math Homework 时间限制:1秒 内存限制:128兆 338 次提交 131 次通过 题目描述 QKL is a poor and busy guy, and he ...
- Doing Homework again(杭电1789)
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- kuangbin专题十二 HDU1074 Doing Homework (状压dp)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 刚接触Linux,菜鸟必备的小知识点(一)
身为一个将要大四的学生,而且还是学计算机的没有接触过linux简直是羞愧难当.这个假期做了一个软件测试员,必须要熟悉linux的操作,所以对于我这个菜鸟我也就说几点比较重要的小知识点吧. 第一.cd指 ...
- bzoj 4320: ShangHai2006 Homework
4320: ShangHai2006 Homework Time Limit: 10 Sec Memory Limit: 128 MB Description 1:在人物集合 S 中加入一个新的程序员 ...
- day4(homework)
第八单元 1) 将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) 2) 将用户信息数据库文件和用户密码数据库文件纵向合并为一个文件/2.txt(追加) 3) 将/1.txt ...
- 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面.
刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面. 刚写完的商城erp + 这个商城前台,新鲜出炉.自己1个人写, 包括php框架和前端html页面.
随机推荐
- Linux:Linux Mint系统的安装
今天就更新一篇了,其实Linux系统大部分都是用虚拟机来安装的,毕竟Windows系统才是我们常用的系统,而Linux系统只是我们工作时才用的,而且使用虚拟机是非常方便的,不用重启电脑就可以使用另一种 ...
- 如何制作exe小程序
1.构建maven项目 需要有一个main入口函数 添加M2_HOME及,java_home的环境变量 打开Preference->Java->Installed JREs->Edi ...
- 胜利大逃亡,bfs,广度优先搜索
题目描述: Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius ...
- shell版的nginx安装
#!/bin/bash # Name:Centos 6.4 安装nginx1.8.1 # Date:-- # Author:qifei@meizu.com Home=$(cd ``;pwd) #这个命 ...
- 分频器的Verilog实现
一.占空比50%的奇数分频 1.实现思路 实现奇数(N)分频,分别用上升沿计数到(N-1)/2,再计数到N-1:用下降沿计数到(N-1)/2,再计数到N-1,得到两个波形,然后把它们相或即可得到N分频 ...
- Problem: 棋盘小游戏(一道有意思的acm入门题
Problem Description 现有一个2行13列的棋盘,棋盘上的任意一个位置可以向他临近的8个位置移动.棋盘上的每一个位置的标号由一个大写的英文字母表示.现在给你一个移动的顺序,问你如何设置 ...
- input type file兼容性
input 中的type file类型 在ie10及以上还算正常,在ie9中你就找不到他在哪了 解决此类的问题就需要巧妙的运用的css 以及input 了 需要两个input配合来写,一个i ...
- Laravel Scout 开启队列, 自定义queue name和queue connection
scout.php的默认配置: 'queue' => env('SCOUT_QUEUE', false), 修改为: 'queue' => [ 'queue' => env('SCO ...
- JAVA 对接腾讯地图,经纬度转换
package com.lvjing.util; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.spr ...
- ES5数组、对象常用方法总结
数组方法: Array.isArray(items);判断判断一个变量是否包含数组数据: forEach(function(value, index, fullArray){ }); every(fu ...