嵌入式学习第十九天!(时间获取、文件属性和权限的获取、软链接和硬链接)

时间获取:

1. time

time_t time(time_t *tloc);

    功能:返回1970-01-01到现在的秒数(格林威治时间)

    参数:

        tloc:存放秒数空间首地址

    返回值:

        成功返回秒数

        失败返回-1 

2. localtime

struct tm *localtime(const time_t *timep);

    功能:讲秒数转换为本地时间

    参数:

        timep:存放秒数空间首地址

    返回值:

        成功返回结构体时间

        失败返回NULL

struct tm {int tm_sec;    /* Seconds (0-60) */int tm_min;    /* Minutes (0-59) */int tm_hour;   /* Hours (0-23) */int tm_mday;   /* Day of the month (1-31) */int tm_mon;    /* Month (0-11) */int tm_year;   /* Year - 1900 */int tm_wday;   /* Day of the week (0-6, Sunday = 0) */int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */int tm_isdst;  /* Daylight saving time */};

3. mktime

time_t mktime(struct tm *tm);

    功能:将本地时间转换为秒数

举例应用:

        获得本地当前的时间和秒数

#include <stdio.h>
#include <time.h>int main(void)
{time_t t;struct tm *ptm = NULL;struct tm pmk;time(&t);printf("%ld\n", t);ptm = localtime(&t);printf("%04d-%02d-%02d %02d:%02d:%02d\n", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);pmk.tm_year = ptm->tm_year;pmk.tm_mon = ptm->tm_mon;pmk.tm_mday = ptm->tm_mday;pmk.tm_hour = ptm->tm_hour;pmk.tm_min = ptm->tm_min;pmk.tm_sec = ptm->tm_sec;t = mktime(&pmk);printf("%ld\n", t);return 0;}

文件属性和权限的获取:

1.stat

int stat(const char *pathname, struct stat *statbuf);

    功能:将pathname对应的文件信息放入statbuf中

    参数:

        pathname:文件路径字符串的首地址
        statbuf:存放文件信息空间的首地址

    返回值:

        成功返回0 
        失败返回-1

struct stat {dev_t     st_dev;         /* ID of device containing file */ino_t     st_ino;         /* Inode number */mode_t    st_mode;        /* File type and mode */nlink_t   st_nlink;       /* Number of hard links */uid_t     st_uid;         /* User ID of owner */gid_t     st_gid;         /* Group ID of owner */dev_t     st_rdev;        /* Device ID (if special file) */off_t     st_size;        /* Total size, in bytes */blksize_t st_blksize;     /* Block size for filesystem I/O */blkcnt_t  st_blocks;      /* Number of 512B blocks allocated *//* Since Linux 2.6, the kernel supports nanosecondprecision for the following timestamp fields.For the details before Linux 2.6, see NOTES. */struct timespec st_atim;  /* Time of last access */struct timespec st_mtim;  /* Time of last modification */struct timespec st_ctim;  /* Time of last status change */#define st_atime st_atim.tv_sec      /* Backward compatibility */#define st_mtime st_mtim.tv_sec#define st_ctime st_ctim.tv_sec};

    /etc/passwd     口令文件

    /etc/group        组信息文件

2. getpwuid

struct passwd *getpwuid(uid_t uid);

    功能:通过UID获得对应的用户信息

    参数:

        uid:用户的ID号

    返回值:

        成功返回包含用户信息的结构体
        失败返回NULL

struct passwd {char   *pw_name;       /* username */char   *pw_passwd;     /* user password */uid_t   pw_uid;        /* user ID */gid_t   pw_gid;        /* group ID */char   *pw_gecos;      /* user information */char   *pw_dir;        /* home directory */char   *pw_shell;      /* shell program */};

3. getgrgid

struct group *getgrgid(gid_t gid);

    功能:通过组ID获得组信息

    参数:

        gid:组的ID号

    返回值:

        成功返回包含组信息的结构体
        失败返回NULL

struct group {char   *gr_name;        /* group name */char   *gr_passwd;      /* group password */gid_t   gr_gid;         /* group ID */char  **gr_mem;         /* NULL-terminated array of pointersto names of group members */};

4. readlink

ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);

    功能:读取链接文件本身的内容

    参数:

        pathname:链接文件的路径
        buf:存放数据空间首地址
        bufsiz:最大存放数据字节数

    返回值:

        成功返回读到字节个数
        失败返回-1


软链接和硬链接:

1. 软链接(符号链接)

        通过文件名链接,所有能够看到的连接文件均为软连接文件

 ln -s file.txt a.txt

2. 硬链接:

        通过文件对应的inode节点链接

ln file.txt b.txt

作业:

        1. 编写程序实现ls -l的功能查看当前目录下所有文件的详细信息

#include "head.h"int ListLstat(const char* pdirname);int ListDir(void)
{DIR *dp = NULL;struct dirent *pp = NULL;dp = opendir(".");if(dp == NULL){perror("fail to opendir");return -1;}while(1){pp = readdir(dp);if(pp == NULL){break;}if(*pp->d_name == '.'){continue;}ListLstat(pp->d_name);}closedir(dp);return 0;
}int ListLstat(const char *pdirname)
{struct stat buf;int ret = 0;struct passwd *pwd = NULL;struct group *gid = NULL;struct tm *ptm = NULL;char *mon[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};char linkbuff[1024] = {0};ret = lstat(pdirname, &buf);if(ret == -1){perror("fail to lstat");return -1;}switch(buf.st_mode & S_IFMT){case S_IFBLK: putchar('b');break;case S_IFCHR: putchar('c');break;case S_IFDIR: putchar('d');break;case S_IFREG: putchar('-');break;case S_IFLNK: putchar('l');break;case S_IFSOCK: putchar('s');break;case S_IFIFO: putchar('p');break;}buf.st_mode & S_IRUSR ? putchar('r') : putchar('-');buf.st_mode & S_IWUSR ? putchar('w') : putchar('-');buf.st_mode & S_IXUSR ? putchar('x') : putchar('-');buf.st_mode & S_IRGRP ? putchar('r') : putchar('-');buf.st_mode & S_IWGRP ? putchar('w') : putchar('-');buf.st_mode & S_IXGRP ? putchar('x') : putchar('-');buf.st_mode & S_IROTH ? putchar('r') : putchar('-');buf.st_mode & S_IWOTH ? putchar('w') : putchar('-');buf.st_mode & S_IXOTH ? putchar('x') : putchar('-');printf(" %ld", buf.st_nlink);pwd = getpwuid(buf.st_uid);if(pwd == NULL){printf(" %d", buf.st_uid);}else{printf(" %s", pwd->pw_name);}gid = getgrgid(buf.st_gid);if(gid == NULL){printf(" %d", buf.st_gid);}else{printf(" %s", gid->gr_name);}printf(" %6ld", buf.st_size);ptm = localtime(&buf.st_mtime);printf(" %s %d %d:%d", mon[ptm->tm_mon], ptm->tm_mday, ptm->tm_hour, ptm->tm_min);printf(" %s", pdirname);if(S_ISLNK(buf.st_mode)){readlink(pdirname, linkbuff, sizeof(linkbuff));printf(" -> %s", linkbuff);}printf("\n");return 0;
}int main(void)
{ListDir();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/692489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python celery使用队列

在celery的配置方法中有个参数叫task_routes&#xff0c;是用来设置不同的任务 消费不同的队列&#xff08;也就是路由&#xff09;。 格式如下&#xff1a; { ‘task name’: { ‘queue’: ‘queue name’ }}直接上代码&#xff0c;简单明了&#xff0c;目录格式如下&#x…

阿里云服务器“镜像”全方面解析

阿里云服务器镜像怎么选择&#xff1f;云服务器操作系统镜像分为Linux和Windows两大类&#xff0c;Linux可以选择Alibaba Cloud Linux&#xff0c;Windows可以选择Windows Server 2022数据中心版64位中文版&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器操…

【触想智能】国产工控机五大分类你知道吗?

工控机是专门为工业控制设计&#xff0c;用于对生产过程中使用的机器设备、生产流程、数据参数等进行监测与控制的计算机。由于工控机经常会在恶劣的环境下运行&#xff0c;对数据的安全性要求也比较高&#xff0c;因此需要单独定制才能满足需求。 在现代化工业生产过程中&…

从零学算法240

240.编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,…

代码随想录 Leetcode45. 跳跃游戏 II

题目&#xff1a; 代码(首刷看解析 2024年2月15日&#xff09;&#xff1a; class Solution { public:int jump(vector<int>& nums) {if (nums.size() 1) return 0;int res 0;int curDistance 0;int nextDistance 0;for (int i 0; i < nums.size(); i) {nex…

网页布局之浮动

一&#xff0c;传统网页布局的三种方式 普通流&#xff08;标准流&#xff09;、浮动、定位。 二&#xff0c;标准流&#xff08;普通流/文档流&#xff09; 即为标签按照规定好的默认方式排列。 1.块级元素会独占一行&#xff0c;从上向下顺序排列。 常用元素&#xff1a;…

Mybatis | 初识Mybatis

初识Mybatis 目录: 初识Mybatis什么是Mybatis&#xff1f;Hibernate 和 MyBatis的区别&#xff1f;Mybatis的下载和使用Mybatis的工作原理 作者简介 &#xff1a;一只大皮卡丘&#xff0c;计算机专业学生&#xff0c;正在努力学习、努力敲代码中! 让我们一起继续努力学习&#…

【动态规划专栏】专题二:路径问题--------3.礼物的最大价值

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

算法模板 6.并查集

并查集 用于解决连通块问题。 判断集合个数也就是判断p[x] x 的个数 836. 合并集合 - AcWing题库 #include <bits/stdc.h> using namespace std; const int N 1e5 10; int p[N]; // 记录每个元素的father int n, m;int find(int x){ // 查询元素x的fatherif(p[x] …

[05] computed计算属性

computed计算属性 语法&#xff1a; 声明在 computed 配置项中&#xff0c;一个计算属性对应一个函数使用起来和普通属性一样使用 {{计算属性名}} 注意 computed配置项和data配置项是同级的computed中的计算属性虽然是函数的写法&#xff0c;但它依然是属性computed中的计算…

linux 修改开发板网卡eth0的ip地址

win10如何新增电脑ip地址&#xff1a; https://blog.csdn.net/linxinfa/article/details/105817473 ifconfig # 可设置网络设备的状态&#xff0c;或是显示目前的设置。 命令详解&#xff1a;https://www.runoob.com/linux/linux-comm-ifconfig.html 一、临时修改 ifconfig e…

MySQL篇之事务

一、事务 1.事务的定义 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 2.事务的特性 ACID的解释如下&#xff1a; 1. …

webpack实际实践优化项目

参考&#xff1a; 如何通过性能优化&#xff0c;将包的体积压缩了62.7% 雅虎35条 20210526-webpack深入学习&#xff0c;搭建和优化react项目 本文只专注于性能优化的这个部分。 总体来说分为两个方面&#xff1a;第一是开发环境中主要优化打包速度&#xff0c;第二是线上环境…

什么是特征值和特征向量?(done)

什么是齐次方程&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198159 行列式和是否有解的关系&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198215 特征值和特征向量 参考视频&#xff1a;https://www.bilibili.com/video/BV1…

怎么把Maven依赖的包都提取到文件夹

由于我用Maven只想借助他下载jar包和依赖&#xff0c;不想自己的程序编译还得依赖Maven&#xff0c;所以试验时候用Maven引用依赖&#xff0c;试验成功再拷贝jar包来本地引用&#xff0c;有时候依赖多&#xff0c;一个个拷贝就太慢了。所以要能批量把所有依赖jar提取出来。 加…

【C语言】长篇详解,字符系列篇2-----strcat,strcmp,strncpy,strncat,strncmp函数的使用和模拟实现【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本期系列为【C语言】长篇详解&#xff0c;字符系列篇2-----“混杂”的字符串函数&#xff0c;字符串函数的使用和模拟实现【图文详解】&#xff0c;图文讲解各种字符串函数&#xff0c;带大家更深刻理解C语言中各种字符串函数的应用&#xff…

LeetCode.589. N 叉树的前序遍历

题目 589. N 叉树的前序遍历 分析 我们之前有做过LeetCode的 144. 二叉树的前序遍历&#xff0c;其实对于 N 插树来说和二叉树的思路是一模一样的。 二叉树的前序遍历是【根 左 右】 N叉树的前序遍历顺序是【根 孩子】&#xff0c;你可以把二叉树的【根 左 右】想象成【根 孩…

【python】网络爬虫与信息提取--scrapy爬虫框架介绍

一、scrapy爬虫框架介绍 scrapy是一个功能强大的网络爬虫框架&#xff0c;是python非常优秀的第三方库&#xff0c;也是基于python实现网络爬虫的重要技术路线。scrapy不是哟个函数功能库&#xff0c;而是一个爬虫框架。 爬虫框架&#xff1a;是实现爬虫功能的一个软件结构和功…

AS-V1000 视频监控平台产品介绍:客户端功能介绍(四)

目 录 一、引言 1.1 AS-V1000视频监控平台介绍 1.2平台服务器配置说明 二、软件概述 2.1 客户端软件用途 2.2 客户端功能 三、客户端功能说明 3.1告警管理 3.1.1告警联动 &#xff08;1&#xff09;告警联动显示 &#xff08;2&#xff09;告警联动处理 3…

基于学习的参数化查询优化方法

一、背景介绍 参数化查询是指具有相同模板&#xff0c;且只有谓词绑定参数值不同的一类查询&#xff0c;它们被广泛应用在现代数据库应用程序中。它们存在反复执行动作&#xff0c;这为其性能优化提供了契机。 然而&#xff0c;当前许多商业数据库处理参数化查询的方法仅仅只…