UC高级编程--实现myls程序

简介: <p>跟着达内视频,学习UC高级编程,完成程序小练习。</p> <p>主要练习的函数为:</p> <p><span style="font-size:18px"><strong> int lstat(const char *path, struct stat *buf);<br></strong></span></p> <p><span style="font-size:18px">

跟着达内视频,学习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;
}

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


目录
相关文章
|
4月前
|
Java 关系型数据库 MySQL
【五一创作】嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】
【五一创作】嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】
|
6月前
|
Windows
vc入门宝典十二(调用其它程序)
vc入门宝典十二(调用其它程序)
|
存储 Go
Go Web编程实战(4)----函数(二)
Go Web编程实战(4)----函数(二)
87 1
Go Web编程实战(4)----函数(二)
|
编译器 Go
Go Web编程实战(4)----函数(一)
Go Web编程实战(4)----函数(一)
80 1
|
存储 Java Go
Go Web编程实战(3)----数据类型(一)
Go Web编程实战(3)----数据类型(一)
101 0
Go Web编程实战(3)----数据类型(一)
|
安全 Go C语言
Go Web编程实战(3)----数据类型(二)
Go Web编程实战(3)----数据类型(二)
90 0
Go Web编程实战(3)----数据类型(二)
|
数据采集 Go
Go Web编程实战(9)----创建客户端
Go Web编程实战(9)----创建客户端
140 1
|
Go C语言
Go Web编程实战(2)----流程控制语句(二)
Go Web编程实战(2)----流程控制语句(二)
73 0
|
Java Go C语言
Go Web编程实战(2)----流程控制语句(一)
Go Web编程实战(2)----流程控制语句(一)
109 0
|
算法 前端开发 小程序
Python | C++、Java、Linux、Go、前端、算法资料分享
Python | C++、Java、Linux、Go、前端、算法资料分享
Python | C++、Java、Linux、Go、前端、算法资料分享