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 环境高级编 ...
随机推荐
- Canny边缘检測算法原理及其VC实现具体解释(一)
图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般能够看作是一个阶跃,既从一个灰度值在非常小的缓冲区域内急剧变化到还有一个灰度相差较大的灰度值.图象的边缘部分集中了图象的大部分信息,图 ...
- fzu 1911 C. Construct a Matrix
C. Construct a Matrix Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 32768KB Special Judge ...
- shell字符串长度
方法一 $ expr length "Find out the length of this string from Linux Bash shell." 57 方法二 str1= ...
- Problem K: Yikes -- Bikes!
http://acm.upc.edu.cn/problem.php?id=2780 昨天做的题,没过……!!!伤心……题意:给你n个单位,n-1组关系,让你单位换算……解题思路:Floyd算法自己听别 ...
- linux配置本地tomcat应用80端口转发
场景: 本地部署tomcat到8080端口,并期望本地访问80端口来访问本地tomcat. 结论: 使用linux下的iptables工具实现端口转发功能. 具体为 现取得root权限 执行iptab ...
- PLSQL数据导入
导入数据 (1) 首先以管理员身份登录plsql; (2) 新建命令窗口 (3) 创建用户,设置帐号,密码 创建语句:create user usernameidenti ...
- css hack 如何区分 ie7 ie8
.style { width:100px; /*火狐以及一般浏览器*/ width:200px\9; /*IE8*/ *width:150px; /*IE7*/ _width:50px; /*IE6* ...
- hdu1869 六度分离(Floyd)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1869 转载请注明出处:http://blog.csdn.net/u012860063?viewmode ...
- Swift - 使用NSURL进行数据的提交和获取(POST与GET)
使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交. 其数据请求的方式既可能是POST也可能是GET.同不管是POST还是GET又可以分为同步请求和异步请求. 下面通过四个例子来进行 ...
- 浅谈mapreduce程序部署
尽管我们在虚拟机client上能非常快通过shell命令,进行运行一些已经封装好实例程序,可是在应用中还是是自己敲代码,然后部署到server中去,以下,我通过程序进行浅谈一个程序的部署过程. 在启动 ...