跟着达内视频,学习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程序的更多相关文章

  1. multiple definition of `err_sys' 《UNIX环境高级编程》

    本文地址:http://www.cnblogs.com/yhLinux/p/4079930.html 问题描述: [点击此处直接看解决方案] 在练习<UNIX环境高级编程>APUE程序清单 ...

  2. 关于UNIX/Linux下安装《UNIX环境高级编程》源代码的问题

    <UNIX环境高级编程(第三版)>是一本广为人知的unix系统编程书籍. 但是,书中的代码示例,要想正确的编译运行,要先做好准备工作: 1.下载源代码 传送门:http://apueboo ...

  3. 读《C#高级编程》第1章问题

    读<C#高级编程>第1章 .Net机构体系笔记 网红的话:爸爸说我将来会是一个牛逼的程序员,因为我有一个梦,虽然脑壳笨但是做事情很能坚持. 本章主要是了解.Net的结构,都是一些概念,并没 ...

  4. 《C#高级编程》读书笔记

    <C#高级编程>读书笔记 C#类型的取值范围 名称 CTS类型 说明 范围 sbyte System.SByte 8位有符号的整数 -128~127(−27−27~27−127−1) sh ...

  5. jquery插件开发继承了jQuery高级编程思路

    要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...

  6. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  7. Node.js高级编程读书笔记Outline

    Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...

  8. (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  9. (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

随机推荐

  1. [置顶] gis海量资源网盘提供VIP账号无广告高速下载 (更新更多资源)

    资源网盘下载地址:http://laoheitan.bego.cc/ 城通网盘 vip帐号共享 省去 烦人的 广告  多任务同时下载 独乐乐 不如众乐乐 好人 勿改密码. 获取到 vip下载连接后 请 ...

  2. java反射小样例

    package reflect; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExc ...

  3. cryptography

    密码关还是有很多变态的题的,整理一下力所能及的吧. Circular Crypto(Asis-CTF2013) 这题只给了一张图片 仔细看一下就知道,这是几个单独的环,把它们分别整理出来.因为看着眼花 ...

  4. 基于visual Studio2013解决面试题之0307最后谁剩下

     题目

  5. Android各代码层获取系统时间的方法

    1. 在java层,long now = SystemClock.uptimeMillis(); 2. 在native层,nsecs_t now = systemTime(SYSTEM_TIME_MO ...

  6. [页面模板框架对比] Apache Tiles VS Sitemesh

    1. 原理对比 (1) Apache Tiles 顾名思义,Tile是瓷砖的意思,也就是说一个网页是由多个Tile组成的. 用户通过访问一个页面的Apache Tiles定义名,就可以访问一个由定义文 ...

  7. [黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)

    ---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. 集合框架按其所实现的接口, 大 ...

  8. MVP模式在Android开发中的应用

    一.MVP介绍      随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一 ...

  9. JDK动态代理简单小程序

    Jdk动态代理 1.动态代理使用的情况:需要在多个方法上加上相同的逻辑的时候,需要用到动态代理. 原因:在多个方法上写相同的逻辑,第一费事,第二在不用的时候维护麻烦 使用动态代理需要用到两个类:分别为 ...

  10. oracle查询语句中case when的使用

    case when语句语法如下: case when  表达式  then valueA  else valueB  end; 具体使用如下: select    (case when a.colum ...