嵌入式学习 Day 22

一. 时间获取:


    1.time 


      time_t time(time_t *tloc);
      功能:
        返回1970-1-1到现在的秒数(格林威治时间)
      参数:
        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);
      功能:
        将本地时间转换为秒数

二. 文件属性和权限的获取:


    1.stat


      int stat(const char *pathname, struct stat *statbuf);    // 操作链接文件指向的文件

      int lstat(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 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
    };

    /etc/passwd   口令文件
    /etc/group    组信息文件

注意:

这样写是不对的,虽然pbuf为指针类型,符合stat的参数类型,但为野指针,信息会随机存储到野指针所指向的空间。 

接函数返回值时可以定义指针来接,但函数参数要考虑能否使用指针 

判断文件类型:

文件类型信息在buf里的st_mode中,将其以16进制的形式打印出来为:0x41fd

通过位运算:与0得0;或1置1

将0x41fd写为二进制形式,再与1111 0000 0000 0000 将只保留前四位文件类型,再将其与上表比较得出文件类型。

判断文件权限:

将0100 0001 1111 1101 与上 0000 0001 0000 0000,只保留1所在位数值不变,其余位置零,从而判断出是否具有该位权限。 

    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 pointers
                                    to 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       //创建软链接 a.txt  到 file.txt

        操作 a.txt 就相当于操作 file.txt

    2.硬链接

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

        ln file.txt b.txt         //创建硬链接 b.txt 到 file.txt

        操作 b.txt 就相当于操作 file.txt

注意:

            删除 file.txt后再次创建 file.txt 软链接再次出现(软链接是通过文件名建立的链接,只要文件名恢复,链接恢复)

            删除 file.txt后再次创建 file.txt 硬链接不会再次出现(硬链接是通过inode节点建立的链接,恢复文件名inode节点不会恢复,链接不会恢复)

对于软连接:a.txt -> inode -> 数据块2 -> file.txt -> inode -> 数据块1

恢复 file.txt 文件名,意味着可再次通过inode节点找到file.txt对应的数据块(此时file.txt对应的数据块不一定在1000这个位置,因为无法被访问到的文件空间将被系统回收,此时新建立的file.txt[大概率不在在1000这个位置,若在数据恰巧恢复],之前的数据丢失[打开file.txt显示空白])

对于硬连接:a.txt -> inode -> 数据块1 

删除file.txt后,仍可以通过b.txt来操作该文件,数据不会丢失。这是因为该文件相当于有两个文件名,删除掉其中一个,仍可以通过另一个文件名来访问到该文件。只是硬链接个数减1

编程实现 ls -l 功能 :

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

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

相关文章

266.【华为OD机试真题】抢7游戏(深度优先搜索DFS-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-抢7游戏二.解题思路三.题解代码Python题解代码…

144. Binary Tree Preorder Traversal(二叉树的前序遍历)

问题描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 问题分析 因为要以数组的形式返回前序遍历序列所以与普通的前序遍历多了一步将返回的数组合并的过程,将当前二叉树的左子树,根,右子树按照顺序合并成为一个数组…

代码随想录算法训练营总结

正式结束了代码随想录算法训练营为期60天的打卡,最终能够坚持下来感觉还是很有成就感的。我作为一个大四保研结束转码的机械人,在推免结束后老师就给我发了代码随想录的网站让我学习算法,我在系统的复习完一遍C语言后初步学习了大致的C语法&a…

解决element UI中el-select选择器比el-input输入框默认宽度小

设置el-select选择器的样式为 style"width: 100%" 直接上代码&#xff1a; <el-select v-model"setForm" placeholder"请选择活动区域" style"width: 100%"><el-option label"区域一" value"shanghai"&…

【漏洞复现】大华DSS视频管理系统信息泄露漏洞

Nx01 产品简介 大华DSS数字监控系统是一个在通用安防视频监控系统基础上设计开发的系统&#xff0c;除了具有普通安防视频监控系统的实时监视、云台操作、录像回放、报警处理、设备治理等功能外&#xff0c;更注重用户使用的便利性。 Nx02 漏洞描述 大华DSS视频管理系统存在信…

编程笔记 Golang基础 008 基本语法规则

编程笔记 Golang基础 008 基本语法规则 Go语言的基本语法规则. Go语言的基本语法规则包括但不限于以下要点&#xff1a; 标识符&#xff1a; 标识符用于命名变量、常量、类型、函数、包等。标识符由字母&#xff08;a-z&#xff0c;A-Z&#xff09;、数字&#xff08;0-9&#…

人工智能_CPU安装运行ChatGLM大模型_安装清华开源人工智能AI大模型ChatGlm-6B_004---人工智能工作笔记0099

上一节003节我们安装到最后,本来大模型都可以回答问题了,结果, 5分钟后给出提示,需要GPU,我去..继续看官网,如何配置CPU运行 没办法继续看: https://github.com/THUDM/ChatGLM-6B 这里是官网可以看到 需要gcc的版本是11.3.0,这里我们先没有去安装,直接试试再说 yum instal…

支持Intel Core i5/i7的高性能三防加固平板|亿道三防onerugged

大家好&#xff01;今天我要向大家推荐一款真正强悍的三防加固平板电脑&#xff0c;它支持Intel Core i5/i7高性能处理器&#xff0c;给你带来无与伦比的高性能体验。是不是心动了呢&#xff1f;那就让我为你揭开这款亿道三防onerugged系列的产品的神秘面纱吧&#xff01; 首先…

SpringBoot+WebSocket实现即时通讯(四)

前言 紧接着上文《SpringBootWebSocket实现即时通讯&#xff08;三&#xff09;》 本博客姊妹篇 SpringBootWebSocket实现即时通讯&#xff08;一&#xff09;SpringBootWebSocket实现即时通讯&#xff08;二&#xff09;SpringBootWebSocket实现即时通讯&#xff08;三&…

Visual Studio下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

Visual Studio安装教程 一、官网下载 官网下载地址&#xff1a; https://visualstudio.microsoft.com/zh-hans/downloads/ 因为是个人学习用途&#xff0c;所以我这里下载的是社区版本。 下载下来的是一个.exe文件 双击打开后&#xff0c;会加载一些东西。最后出现下面的界面…

小程序缓存封装 storage

const postfix _expiry // 缓存有效期后缀 module.exports {/** * 设置缓存 * param {[type]} k [键名] * param {[type]} v [键值] * param {[type]} t [时间、单位秒] */set(k, v, t) {uni.setStorageSync(k, v)const seconds parseInt(t)if (seconds > 0) …

架构(十四)动态Groovy脚本

一、引言 最近作者的平台项目需要实现前端输入脚本&#xff0c;后端在用户设置好的一些情况下运行这段脚本。后端是java&#xff0c;所以我们采用Groovy脚本。 所以要实现的功能就是动态的Groovy脚本&#xff01; 二、Groovy介绍 了解groovy和python的就可以直接到第三章了 2…

QGis软件 —— 7、QGis - 绘制操作多边形、多边形与线条互转、多边形经纬度导出csv文件

绘制操作多边形 1、绘制多边形&#xff08;下面附上结果及操作过程&#xff09; 结果如下&#xff1a; 具体操作&#xff1a; 2、对多边形加入字段信息并显示&#xff08;下面附上结果及操作过程&#xff09; 结果如下&#xff1a; 具体操作&#xff1a; 多边形与线条互转 …

加载arcgis切片服务网络请求有大量404错误

需求&#xff1a; 前端访问arcgis切片服务时&#xff0c;在网络请求中出现大量404&#xff08;Not Found&#xff09;错误&#xff0c;切片时设置了感兴趣区域&#xff0c;在感兴趣范围内请求切片时能够正常返回切片。 问题分析&#xff1a; 设置感兴趣区域切片的目的是减少站…

【 JS 进阶 】异常处理与 debugger 调试

异常处理 了解 JavaScript 中程序异常处理的方法&#xff0c;提升代码运行的健壮性。 throw 异常处理是指预估代码执行过程中可能发生的错误&#xff0c;然后最大程度的避免错误的发生导致整个程序无法继续运行 总结&#xff1a; throw 抛出异常信息&#xff0c;程序也会终止…

AD24-开窗

一、PCB阻焊开窗处理 开窗效果图 1、将铜皮选中&#xff0c;复制&#xff0c;来到阻焊层&#xff0c;利用特殊粘贴 2、如出现报错&#xff0c;可利用实心填充在阻焊层进行重新绘制&#xff1b;在3D状态下进行查看 3、放置一块填充&#xff1b;称为露基材&#xff08;PCB材料&am…

QT常用事件

鼠标事件&#xff08;QMouseEvent&#xff09;&#xff0c;如点击、移动、释放等。 键盘事件&#xff08;QKeyEvent&#xff09;&#xff0c;如按键按下和释放。 窗口事件&#xff08;QResizeEvent, QMoveEvent&#xff09;&#xff0c;当窗口大小或位置改变时。 绘制事件&…

内网穿透与搭建私人服务器

前言 内网穿透是一种技术&#xff0c;允许用户从外部网络访问内部私有网络中的服务器或设备。这对于想要从任何地方访问家中或办公室内部网络资源的用户非常有用。以下是为初学者准备的关于如何实现内网穿透以及搭建自己的私人服务器的详细指南。 在这个数字化时代&#xff0c;…

弱网演练的小插曲记录

文章目录 1. 写在最前面1.1 关于弱网1.2 关于插曲 2. 模拟弱网的工具2.1 tc2.1.1 原理2.1.2 使用 2.2 blade2.2.1 原理2.2.2 使用 3. tc vs iptable4. 碎碎念5.参考资料 1. 写在最前面 节前在做历史故障演练的 1:1 复现&#xff0c;以验收当前新增的监控告警可以覆盖历史的故障…

python之ftp小工具

文章目录 python之FTP小工具 python之FTP小工具 源码 #!/usr/bin/python3 import os import sys from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler, ThrottledDTPHandler from pyftpdlib.servers import FTPServer import logg…