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 环境高级编 ...
随机推荐
- Rationnal Rose2003安装并破解
1.安装Rational Rose2003时,在需选择安装项的时候,只选择Rational Rose EnterPrise Edition即可,不需选择其他项,之后选择“DeskTop Install ...
- SilkTest Q&A 8
Q72.如何在一个testplan中运行所有的testcase? A72. 1.打开testplan 2.点击Run/Run All Tests菜单,SilkTest开始执行testplan中所有的t ...
- Oracle Tablespace Transportation
前提:进行表空间传输需要用户有SYSDBA的系统权限,被移动的表空间是自包含的表空间,不应有依赖于表空间外部对象的对象存在.确定是否自包含可使用系统包DBMS_TTS中的TRANSPORT_SET_C ...
- iOS:获取图片Alpha图片
-(void)createImages { // Load the alpha image, which is just the same Ship.png image used in the cli ...
- 用 managedQuery() 时须要注意的一个陷阱
Activity 里面提供了一个 managedQuery() 方法,依照 Android SDK 里面的说明,"the activity will manage its lifecycle ...
- ym——安卓巴士总结了近百个Android优秀开源项
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 1.Android团队提供的演示样例项目 假设不是从学习Android SDK中提供的 ...
- 深度RAMOS,把操作系统全部安装在内存上
你看下深度RAMOS就知道了 RAMOS+音速启动+绿色软件+云端 很爽 http://www.shenduwin7.com/jiaocheng/52.html
- spring mvc controller间跳转 重定向
1. 需求背景 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 本来以为挺简单的一 ...
- timeout connect 10000 # default 10 second time out if a backend is not found
timeout connect <timeout> timeout contimeout <timeout> (deprecated) Set the maximum time ...
- 更改windows系统语言,改为英文