UC高级编程--实现myls程序
跟着达内视频,学习UC高级编程,完毕程序小练习。
主要练习的函数为:
int lstat(const char *path, struct stat *buf);
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);此函数, 第一次使用。
time_t mktime(struct tm *tm);//把分离的时间合成整数,写项目代码中,当时自己实现了这个函数功能。
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
#include <grp.h>
#include <pwd.h> void show01(struct stat st)//文件属性-rwxr--r--
{
/*打印文件类型*/
if (S_ISLNK(st.st_mode)) {
printf("l");
} else if (S_ISREG(st.st_mode)) {
printf("-");
} else if (S_ISDIR(st.st_mode)) {
printf("d");
} else if (S_ISCHR(st.st_mode)) {
printf("c");
} else if (S_ISBLK(st.st_mode)) {
printf("b");
} else if (S_ISFIFO(st.st_mode)) {
printf("f");
} else if (S_ISSOCK(st.st_mode)) {
printf("s");
}
/*U文件全部者的权限*/
if (st.st_mode & S_IRUSR){
printf("r");
} else {
printf("-");
}
if (st.st_mode & S_IWUSR){
printf("w");
} else {
printf("-");
}
if (st.st_mode & S_IXUSR){
printf("x");
} else {
printf("-");
}
/*G文件全部组的权限*/
if (st.st_mode & S_IRGRP){
printf("r");
} else {
printf("-");
}
if (st.st_mode & S_IWGRP){
printf("w");
} else {
printf("-");
}
if (st.st_mode & S_IXGRP){
printf("x");
} else {
printf("-");
}
/*O其他用户的权限*/
if (st.st_mode & S_IROTH){
printf("r");
} else {
printf("-");
}
if (st.st_mode & S_IWOTH){
printf("w");
} else {
printf("-");
}
if (st.st_mode & S_IXOTH){
printf("x");
} else {
printf("-");
}
printf(" ");
} void show02(struct stat st)//硬链接数
{
printf("%lu", st.st_nlink);
printf(" ");
} void show03(struct stat st)//username
{
struct passwd *psd ;
psd = getpwuid(st.st_uid);
printf("%s", psd->pw_name);
printf(" ");
} void show04(struct stat st)//组名
{
struct group *grp = getgrgid(st.st_gid);
printf("%s", grp->gr_name);
printf(" ");
} void show05(struct stat st)//文件大小
{
printf("%lu", st.st_size);
printf(" ");
} void show06(struct stat st)//文件时间
{
char timebuf[20];
struct tm* newtime = localtime(&st.st_mtime);
strftime(timebuf, 20,"%B %d %H:%M",newtime);
printf("%s", timebuf);
printf(" ");
} void show07(const char *fname)//文件名
{
printf("%s", fname);
printf(" ");
} int main(int argc, const char *argv[])
{
int ret = 0;
struct stat st; if(argc<2)
{
printf("./a.out file\n");return ;
}
ret = lstat(argv[1], &st);
if(ret<0) perror("lstat()"); show01(st);
show02(st);
show03(st);
show04(st);
show05(st);
show06(st);
show07(argv[1]); puts("");//换行
return 0;
}
函数的接口设计的方面,不是非常合理,主要是练习函数的使用。
UC高级编程--实现myls程序的更多相关文章
- multiple definition of `err_sys' 《UNIX环境高级编程》
本文地址:http://www.cnblogs.com/yhLinux/p/4079930.html 问题描述: [点击此处直接看解决方案] 在练习<UNIX环境高级编程>APUE程序清单 ...
- 关于UNIX/Linux下安装《UNIX环境高级编程》源代码的问题
<UNIX环境高级编程(第三版)>是一本广为人知的unix系统编程书籍. 但是,书中的代码示例,要想正确的编译运行,要先做好准备工作: 1.下载源代码 传送门:http://apueboo ...
- 读《C#高级编程》第1章问题
读<C#高级编程>第1章 .Net机构体系笔记 网红的话:爸爸说我将来会是一个牛逼的程序员,因为我有一个梦,虽然脑壳笨但是做事情很能坚持. 本章主要是了解.Net的结构,都是一些概念,并没 ...
- 《C#高级编程》读书笔记
<C#高级编程>读书笔记 C#类型的取值范围 名称 CTS类型 说明 范围 sbyte System.SByte 8位有符号的整数 -128~127(−27−27~27−127−1) sh ...
- jquery插件开发继承了jQuery高级编程思路
要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- Node.js高级编程读书笔记Outline
Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...
- (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
随机推荐
- 使用JDK自带的工具将中文转换为ascii码
有时候在MyEclipse中,文件只能保存为“ISO-8859-1”的类型,而这种类型的文件时无法保存中文数据的,那么我们只能将中文数据经过Unicode编码才能往文件中保存,这里可以使用JDK自带的 ...
- 阿斯钢iojeg9uhw8uhy平
http://www.huihui.cn/share/8424421 http://www.huihui.cn/share/8424375 http://www.huihui.cn/share/842 ...
- ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏
本篇讲解三个工具栏控件.其中Ext.toolbar.Toolbar可以用来放置一些工具类操控按钮和菜单,Ext.toolbar.Paging专门用来控制数据集的分页展示,Ext.ux.statusba ...
- javascript (十四) dom
通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素. HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object M ...
- 与众不同 windows phone (7) - Local Database(本地数据库)
原文:与众不同 windows phone (7) - Local Database(本地数据库) [索引页][源码下载] 与众不同 windows phone (7) - Local Databas ...
- UVA11090 Going in Cycle!! (二分+SPFA推断有无负权)
Problem G: Going in Cycle!! Input: standard input Output: standard output You are given a weighted d ...
- HDU4911-Inversion(树状数组)
Inversion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tota ...
- 忽然想到:把Mu的源代码一网打尽
那么那些流媒体开发的公司,就不会拒绝我了,真是一举两得.
- vs2008编译QT开源项目三国杀(五篇文章)
请参看 http://tieba.baidu.com/f?kz=1508964881 按照上面的网址教程,下载三国杀源码,swig工具,并下载最新的QT4.8.2 for vs2008.我本机已经安装 ...
- 常用的JQuery数字类型验证正则表达式
var regexEnum = { intege:"^-?[1-9]//d*$", //整数 intege1:"^[1-9]//d*$", ...