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;
}

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

时间: 2025-01-11 03:22:01

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

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 <s

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

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

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

<UNIX环境高级编程(第三版)>是一本广为人知的unix系统编程书籍. 但是,书中的代码示例,要想正确的编译运行,要先做好准备工作: 1.下载源代码 传送门:http://apuebook.com/code3e.html 2.解压源代码 tar xf src.3e.tar.gz 3.安装libbsd-devel,不然编译的时候回报错 yum install libbsd-devel -y 4.编译 cd apue.3e/ make cp ./include/apue.h /usr/inclu

UNIX环境高级编程学习笔记(第一章UNIX基础知识)

总所周知,UNIX环境高级编程是一本很经典的书,之前我粗略的看了一遍,感觉理解得不够深入. 听说写博客可以提高自己的水平,因此趁着这个机会我想把它重新看一遍,并把每一章的笔记写在博客里面. 我学习的时候使用的平台是Windows+VMware+debian,使用secureCRT来连接(可以实现多个终端连接). 因为第一章是本书大概的描述,所以第一章的我打算写得详细一点,而且书本的原话占的比例会比较多,重点的东西会用粗体显示出来. 1.1  引言 所有操作系统都为他们所运行的程序提供服务.典型的

Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APU

Linux C高级编程——网络编程基础(1)

Linux高级编程--BSD socket的网络编程 宗旨:技术的学习是有限的,分享的精神是无限的. 一网络通信基础 TCP/IP协议簇基础:之所以称TCP/IP是一个协议簇,是由于TCP/IP包括TCP .IP.UDP.ICMP等多种协议.下图是OSI模型与TCP/IP模型的对照.TCP/IP将网络划分为4层模型:应用层.传输层.网络层和网络接口层(有些书籍将其分为5层,即网络接口层由链路层和物理层组成) (1)网络接口层:模型的基层.负责数据帧的发送已接收(帧是独立的网络信息传输单元).网络

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

<C#高级编程>读书笔记 C#类型的取值范围 名称 CTS类型 说明 范围 sbyte System.SByte 8位有符号的整数 -128~127(−27−27~27−127−1) short System.Int16 16位有符号的整数 -32 768~32 767(−215−215~215−1215−1) int System.Int32 32位有符号的整数 -2 147 483 648~2 147 483 647(−231−231~231−1231−1) long System.Int

OC高级编程iOS多线程个人理解一

大部分笔记源自于:Objective-C高级编程(iOS与OS多线程和内存管理)一书,时间有些久远,甚至GCD网上说已经不需要手动释放release了,但是书中强调是使用GCD需要开发者自己管理计数. 首先什么是GCD? 这是Apple公司为了方便开发者,使开发者更专注于多线程中的任务执行内容的API,官方说明中:开发者要做的只是定义想执行的任务并追加到适当的Dispatch Queue中.是C语言但被组建成面像对象风格.他是我们是用来异步执行任务的技术之一.还有Pthread,NSThread

《UNIX环境高级编程》学习心得 一

本文内容大部分摘自<UNIX环境高级编程>,附有部分个人心得. 1.unix体系结构 从严格意义上来说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境.我们通常将这种软件称为内核(kernel),因为它相对较小,而且位于环境核心.如图显示unix体系结构. 内核接口被称为系统调用(system call).公用函数库构建在系统调用接口之上,应用程序既可食用公用函数库,也可以使用系统调用.shell是一个特殊的应用程序,为运行其他应用程序提供了一个接口. 从广义上来讲,操作系