Linux-时间接口-005

news2024/10/6 3:40:25

学习重点:

1.函数接口
2.【ls-l】命令的实现

1【time】

1.1函数原型

【time_t time(time_t *tloc);】

1.2函数功能

返回1970-1-1到现在的秒数(格林威治时间)

1.3函数参数

1.3.1【tloc】

存放秒数空间首地址
存放的秒数:如果【tloc】非空,返回值也会存储在tloc指向的内存中;自【1970-01-01 00:00:00+0000(UTC)】时起到现在的秒数。

1.4返回值

【成功】:返回秒数
【失败】:返回-1 

1.5源码示例

在这里插入图片描述

2【localtime】

2.1函数原型

【struct tm *localtime(const time_t *timep);】

2.2函数功能

将秒数转换为本地时间

2.3函数参数

2.3.1【timep】

存放秒数空间首地址

2.4返回值

【成功】:返回结构体时间
【失败】:返回NULL
包含时间信息的结构体(详见【man】手册【man localtime】):
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 */
};

2.5源码示例

在这里插入图片描述

注意:

(1)【tm】结构体中的年份:是从【1990】年计算的,要得到正确年份,则应【+1990】。
(2)【tm】结构体中的月份:是从【0】开始计算的,要得到正确月份,则应【+1】。

3【mktime】

3.1函数原型

【time_t mktime(struct tm *tm);】

3.2函数功能

将本地时间转换为秒数

3.3函数参数

3.3.1【tm】

包含时间信息的结构体,用于输入本地时间。

结构体说明(详见【man】手册:【man mktime】):
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.4返回值

【成功】:返回时间(time_t类型)
【失败】:返回-1(time_t类型)

3.5源码示例

在这里插入图片描述

4文件属性获取

【man 2 stat】
【man 7 inode】

4.1【stat】

4.1.1函数原型

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

4.1.2函数功能

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

4.1.3函数参数

4.1.3.1【pathname】
文件路径字符串的首地址
4.1.3.2【statbuf】
存放文件信息空间的首地址
结构体说明(详见【man】手册,【man stat】):
struct stat {
    dev_t     st_dev;         /* ID of device containing file(文件所在设备的 ID) */
    ino_t     st_ino;         /* Inode number (文件对应 inode 节点编号)*/
    mode_t    st_mode;        /* File type and mode(文件对应的模式) */
    nlink_t   st_nlink;       /* Number of hard links(文件的链接数) */
    uid_t     st_uid;         /* User ID of owner(文件所有者的用户 ID) */
    gid_t     st_gid;         /* Group ID of owner(文件所有者的组 ID) */
    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 nanosecond
        precision 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
};
【st_dev】:文件所在的设备。
【st_ino】:文件的【inode】号。
【st_mode】:文件的模式,如【文件类型】【文件权限】都记录在该变量中。
【st_nlink】:记录文件的【硬链接数】,即为该文件创建了多少个硬链接文件。
【st_uid】:文件所有者的用户ID。 
【st_gid】:文件所有者的组ID。
【st_rdev】:该变量记录了设备号,设备号只针对于设备文件,包括字符设备文件和块设备文件。
【st_size】:该变量记录了文件的大小,以字节为单位。
【st_atim】:该变量记录了文件最后被访问的时间,是【struct timespec】类型变量。
【st_mtim】:该变量记录了文件内容最后被修改的时间,是【struct timespec】类型变量。
【st_ctim】:该变量记录了文件状态最后被改变的时间,是【struct timespec】类型变量。

4.1.4返回值

【成功】:返回0 
【失败】:返回-1 

4.1.5文件属性详解

既然【stat】函数是获取指定路径文件的属性,那么使用【stat】函数的关键在于要知道文件有那些属性。
4.1.5.1文件类型

4.2【getpwuid】

4.2.1函数原型

【struct passwd *getpwuid(uid_t uid);】

4.2.2函数功能

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

4.2.3函数参数

4.2.3.1【uid】
用户的ID号

4.2.4返回值

【成功】:返回包含用户信息的结构体
【失败】:返回NULL
结构体说明(详见【man】手册:【man getpwuid】):
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 */
};

4.3【getgrgid】

4.3.1函数原型

【struct group *getgrgid(gid_t gid);】

4.3.2函数功能

通过组ID获得组信息

4.3.3函数参数

4.3.3.1【gid】
组的ID号

4.3.4返回值

【成功】:返回包含组信息的结构体
【失败】:返回NULL
结构体说明(详见【man】手册:【man getgrgid】):
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 pointers to names of group members */
};

4.4【readlink】

4.4.1函数原型

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

4.4.2函数功能

读取连接文件本身的内容

4.4.3函数参数

4.4.3.1【pathname】
链接文件的路径
4.4.3.2【buf】
存放数据空间首地址
4.4.3.3【bufsiz】
最大存放数据字节数

4.4.4返回值

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

4.5链接属性

4.4.1软连接(符号链接)

通过文件名链接,所有能够看到的连接文件均为软连接文件
【ln -s file.txt a.txt】 

4.4.2硬链接

通过文件对应的【inode】节点链接     
【ln file.txt b.txt】 

4.6写一个程序实现【ls-l】命令

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

MySQL 窗口函数温故知新

本文用于复习数据库窗口函数,希望能够温故知新,也希望读到这篇文章的有所收获。 本文以:MySQL为例 参考文档: https://www.begtut.com/mysql/mysql-window-functions.html 使用的样例数据:https://www.begtut.com/m…

提高效率、降低成本:外贸企业必备好用ERP软件盘点

好用的外贸ERP软件有哪些?本期为您盘点的外贸ERP软件有:Zoho Books,孚盟M8,富通天下,睿贝软件。 外贸ERP系统是什么 企业资源规划(ERP)系统是一种先进的管理软件,尤其是在外贸和国际…

如何使用Docker部署开源Leanote蚂蚁笔记并发布个人博客至公网

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 1. 安装Docker2. Docker本地部署Leanote蚂蚁笔记3. 安装…

通过eeprom验证FPGA实现的单字节/页读写IIC接口时序

1、概括 前文设计基于FPGA的IIC接口模块,本文将使用eeprom来验证该模块的设计。为了便于查看读写波形,采用两个按键来控制对eeprom数据的读写,当按键0按下后,FPGA向eeprom的前64个存储地址写入地址对应的数据,当按键1按…

文件上传漏洞--Upload-labs--Pass20--数组绕过

一、漏洞原理 漏洞来源:count()函数漏洞。 现自定义一个数组 arr[],定义arr[0]1,arr[3]2, 此时count(arr)的值为2,则arr[count[arr]]即为arr[2],但是arr[2]未定义,即为一个空值,若使用count()函数的本意是…

大数据计算技术秘史(上篇)

在之前的文章《2024 年,一个大数据从业者决定……》《存储技术背后的那些事儿》中,我们粗略地回顾了大数据领域的存储技术。在解决了「数据怎么存」之后,下一步就是解决「数据怎么用」的问题。 其实在大数据技术兴起之前,对于用户…

【TCP/IP】组播

一、组播介绍 组播(Multicast)是网络技术中数据传输的一种方法,它允许将数据包同时发送给一组指定的目标,而不是单个的目标(单播 Unicast)或所有可能的目标(广播 Broadcast)。组播传…

Python的自定义函数

Python的自定义函数 自定义函数的作用匿名函数语法示例 自定义函数语法示例 自定义函数的作用 定制化需求降低代码重复编写 匿名函数 匿名函数,可以用lambda关键字定义。通过lambda构造的函数可以没有名称,即在自定义匿名函数时,所有代码可…

【智能家居】7、主程序编写+实现语音、网络和串口功能

需要毕业论文私信有偿获取 截止目前mainPro.c代码 #include <stdio.h> #include <string.h>#include "controlDevices.h" #include "inputCmd.h"struct Devices *findDevicesName(char *name,struct Devices *phead){struct Devices *tmp=ph…

得物面试:Kafka消息0丢失,如何实现?

得物面试&#xff1a;Kafka消息0丢失&#xff0c;如何实现&#xff1f; 尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面…

更改WordPress作者存档链接author和Slug插件Edit Author Slug

WordPress默认所有用户的存档永久链接都是/author/username/&#xff0c;不管是管理员还是订阅者或贡献者或作者或编辑。如果你想要自定义用户存档链接&#xff0c;比如根据角色不同使用不一样的author&#xff0c;或者自定义作者链接中的用户名Slug&#xff0c;那么建议考虑使…

Win32 获取EXE/DLL文件版本信息

CFileVersion.h #pragma once#include <windows.h> #include <string> #include <tchar.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 版本号辅助类 class CVersionNumber { public:// 无参构造CVersionN…

uniapp实现全局悬浮框

uniapp实现全局悬浮框(按钮,页面,图片自行设置) 可拖动 话不多说直接上干货 1,在components新建组件(省去了每个页面都要引用组件的麻烦) 2,实现代码 <template><view class"call-plate" :style"top: top px;left: left px;" touchmove&quo…

探索Redis是否为单线程的奥秘(文末送书)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. Redis中的多线程二. I/O多线程三. Redis中的多进程四. 结论五. 书籍推荐5.1 书…

OpenLayers水平镜像和垂直镜像

目录 1.前言2.概念介绍2.1 旋转2.2 水平镜像2.3 垂直镜像 3.要素的镜像3.1 镜像轴始终是水平的或者垂直的3.2 镜像轴是任意角度 4.图片的镜像5.总结 1.前言 最近项目中用到了要素和图片的水平镜像和垂直镜像功能。这些功能说难不难&#xff0c;说简单也不简单&#xff0c;就是稍…

【SQL注入】靶场SQLI DUMB SERIES-24通过二次注入重置用户密码

先使用已知信息admin/admin登录进去查下题&#xff0c;发现可以修改密码 猜测可能存在的SQL语句&#xff1a;UPDATE user SET password新密码 WHERE user用户名 and password旧密码 假设我们知道有个admin用户&#xff0c;但是不知道其密码&#xff0c;如何可以将其密码重置&…

[AIGC] 使用Curl进行网络请求的常见用法

使用Curl进行网络请求的常见用法 Curl是一个无比强大的工具&#xff0c;它可以用来获取和发送数据&#xff0c;支持众多的协议&#xff0c;包括HTTP、HTTPS、FTP、FTPS、SFTP和更多。它还支持HTTP POST&#xff0c;HTTP PUT&#xff0c;HTTPS证书&#xff0c;HTTP基础验证等。…

【2024软件测试面试必会技能】Postman(1): postman的介绍和安装

Postman的介绍 Postman 是一款谷歌开发的接口测试工具,使API的调试与测试更加便捷。 它提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..)&#xff0c;附带任何数量的参数 headers。 postman是一款支持http协议的接口调试…

流动人员人事档案主要有哪些作用

流动人员人事档案是指记录企事业单位与个人之间的雇佣关系的文件。在企事业单位中&#xff0c;流动人员是指临时聘用的员工、实习生、临时工等&#xff0c;他们的雇佣关系相对不稳定&#xff0c;因此需要建立相应的人事档案来管理和记录他们的基本信息、工作经历、劳动合同等重…

unity学习(34)——角色选取界面(跨场景坑多)

先把SelectMenu中的camera的audio listener去掉。 现在还是平面&#xff0c;直接在camera下面添加两个panel即可&#xff0c;应该是用不到canvas了&#xff0c;都是2D的UI。 加完以后问题来了&#xff0c;角色选择界面的按钮跑到主界面上边了&#xff0c;而且现在账号密码都输…