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)//用户名
{
	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;
}

函数的接口设计的方面,不是很合理,主要是练习函数的使用。 

时间: 2024-09-17 02:45:13

UC高级编程--实现myls程序的相关文章

UC高级编程--利用信号实现进程间通信

/********************************************************************** *Copyright (c) 2014,TianYuan *All rights reserved. * * 文件名称: sigin.c * 文件标识:无 * 内容摘要:利用信号实现进程间通信,测试代码. 把要发送的数据存放到文件中,并发送信号. * 其它说明:无 * 当前版本: V1.0 * 作 者: wuyq * 完成日期: 20140711 * *

《windows应用高级编程-C#编程篇》书中程序的小问题及改进

window|编程|程序|高级|问题 清华大学出版社<windows应用高级编程-C#编程篇>,2003年1月第1版,Benny Johansen & Matthew Reynolds等著,张哲峰译,在第八章文件操作中的一个记事本小程序,有三个小问题,其中两个同性质问题问题一:StreamReader streamReader=new StreamReader(fileStream); 当打开的文件是中文字符时,会出现乱码.当打开文件的同时,将读取的文件内容转化为StreamReade

ASP 3.0高级编程(四十四)

编程|高级 第10章 ASP与客户端数据 在一本ASP专著中讨论客户端数据,这与服务器端的ASP编程是否矛盾?情况并非如此,因为我们至今尚未碰到只从事服务器端编程的ASP程序员.虽然ASP是一项服务器端技术,但可以想象,编程人员不可能仅仅使用ASP进行编程.从事ASP编程的Web开发人员,仍然需要与客户端数据进行交互.因此,围绕着ASP构建一个应用程序时必须考虑整个应用程序的情况,这也意味着必须考虑客户端.为了获得一个运行良好.快速响应的应用程序,需要很好地使用客户端数据.本章将讨论如何在客户端

UNIX环境高级编程:线程属性之并发度

并发度控制着用户级线程可以映射的内核线程或进程的数目.如果操作系统的实现在内核级的线程和用户级的线程之间保持一对一的映射,那么改变并发度并不会有什么效果,因为所有的用户级线程都可能被调度到.但是,如果操作系统的实现让用户级线程到内核级线程或进程之间的映射关系是多对一的话,那么在给定时间内增加可运行的用户级线程数,可能会改善性能. pthread_setconcurrency函数可以用于提示系统,表明希望的并发度. #include <pthread.h> int pthread_getconc

jQuery的基本概念与高级编程

  这篇文章主要介绍了jQuery的基本概念与高级编程的简单介绍,有需要的小伙伴可以参考下. (1)jQuery是由美国人John Resig于2006年创建的一个JavaScript库,从最初的1.0版本发展到2011年3月面世的1.5.2版本.作为一个JavaScript库,jQuery极大程度上解决了浏览器的兼容性问题,能够在IE 6.0 +.FF 2.0 +.Safari 3.0 +.Opera 9.0 +以及Chrome下正常运行. (2)虽然jQuery并不是唯一的JavaScrip

jquery高级编程的最佳实践详解

 这篇文章主要介绍了jquery高级编程的最佳实践详解,学习JQ的朋友一定需要这个,参考下吧 加载jQuery   1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用CDN的好处,点此查看一些主流的jQuery CDN地址.    代码如下: <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.mi

PHP高级编程之消息队列

PHP高级编程之消息队列 http://netkiller.github.io/journal/php.mq.html Mr. Neo Chen (陈景峰), netkiller, BG7NYT 中国广东省深圳市龙华新区民治街道溪山美地518131+86 13113668890+86 755 29812080<netkiller@msn.com> 版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明. 文档出处: http://netkiller.github.io ht

PHP 高级编程之多线程(四)-多线程与ZeroMQ

PHP 高级编程之多线程 http://netkiller.github.io/journal/thread.php.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT)     中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 +86 755 29812080<netkiller@msn.com> 版权 2011, 2012, 2013, 2014 http://netkiller.github.io 版权声明 转载请与作

092_《Delphi6高级编程》

<Delphi6高级编程> Delphi 教程 系列书籍 (092) <Delphi6高级编程> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: 下载 作者: 飞思科技产品研发中心 丛书名: 开发专家之Delphi 出版社:电子工业出版社 ISBN:7505373609 上架时间:2002-2-7 出版日期:2002 年1月 页码:646 版次:1-1 内容简介 本书属于<开发专家之DelPhi>系列.Delphi 6是Borland公司推出的