Day 6.文件属性和权限的获取

时间获取

1.time

time_t time(time_t *tloc);

功能:

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

参数:

tloc:存放秒数空间的首地址

返回值:

成功返回秒数

失败返回-1

2.localtime

struct tm *localtime(const time_t *timep);

功能:

将秒数转换为本地时间

参数:

time:存放秒数空间的首地址

返回值:

成功返回结构体时间

失败返回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 "head.h"int main(void)
{time_t t = 0;time_t t1 = 0;struct tm *pm = NULL;struct tm stm;stm.tm_year = 2024-1900;stm.tm_mon = 2-1;stm.tm_mday = 20;stm.tm_hour = 11;stm.tm_min = 58;stm.tm_sec = 40;t = mktime(&stm);printf("t=%ld\n",t);time(&t1);pm = localtime(&t1);printf("%04d-%02d-%02d  %02d:%02d:%02d\n",pm->tm_year+1900,pm->tm_mon+1,pm->tm_mday,pm->tm_hour,pm->tm_min,pm->tm_sec);printf("t1=%ld\n",t1);return 0;
}

文件属性和权限的获取

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

文件类型:形式1

形式2

文件的执行权限:

/etc/passwd   口令文件

 /etc/group    组信息文件

1)打印文件类型

#include "head.h"int main(int argc,const char *argv[])
{struct stat buf;int ret = 0;if (argc != 2){fprintf(stderr,"User:./a.out filename!\n");return -1;}ret = stat(argv[1],&buf);if (ret == -1){perror("fial to stat");return -1;}switch(buf.st_mode & S_IFMT){case S_IFDIR:putchar('d');break;case S_IFREG:putchar('-');break;case S_IFLNK:putchar('l');break;case S_IFBLK:putchar('b');break;case S_IFSOCK:putchar('s');break;case S_IFCHR:putchar('c');break;case S_IFIFO:putchar('p');break;}
#if 0if (S_ISREG(buf.st_mode)){putchar('-');}else if (S_ISDIR(buf.st_mode)){putchar('d');	}else if (S_ISCHR(buf.st_mode)){putchar('c');}else if (S_ISBLK(buf.st_mode)){putchar('b');}else if (S_ISLNK(buf.st_mode)){putchar('l');}else if (S_ISSOCK(buf.st_mode)){putchar('s');}else if (S_ISFIFO(buf.st_mode)){putchar('p');}
#endifputchar('\n');return 0;
}

2).文件权限打印

#include "head.h"int main(int argc,const char *argv[])
{struct stat buf;int ret = 0;if (argc != 2){fprintf(stderr,"User:./a.out filename!\n");return -1;}ret = stat(argv[1],&buf);if (ret == -1){perror("fial to stat");return -1;}switch(buf.st_mode & S_IFMT){case S_IFDIR:putchar('d');break;case S_IFREG:putchar('-');break;case S_IFLNK:putchar('l');break;case S_IFBLK:putchar('b');break;case S_IFSOCK:putchar('s');break;case S_IFCHR:putchar('c');break;case S_IFIFO:putchar('p');break;}
#if 0if (S_ISREG(buf.st_mode)){putchar('-');}else if (S_ISDIR(buf.st_mode)){putchar('d');	}else if (S_ISCHR(buf.st_mode)){putchar('c');}else if (S_ISBLK(buf.st_mode)){putchar('b');}else if (S_ISLNK(buf.st_mode)){putchar('l');}else if (S_ISSOCK(buf.st_mode)){putchar('s');}else if (S_ISFIFO(buf.st_mode)){putchar('p');}
#endifbuf.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('-');putchar('\n');return 0;
}

3).打印硬链接的个数:

	printf(" %ld ",buf.st_nlink);

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).打印文件的用户名和组名以及文件的字节大小

    struct stat buf;struct passwd *pwd = NULL;struct group *gup = NULL;pwd = getpwuid(buf.st_uid);if (pwd == NULL){printf("%d ",buf.st_uid);}else{printf("%s ",pwd->pw_name);}gup = getgrgid(buf.st_gid);if (gup == NULL){printf("%d ",buf.st_gid);}else{printf("%s ",gup->gr_name);}printf("%ld ",buf.st_size);

5).打印文件更改日期个时间

	struct tm *ptm = NULL;char *mon[12] = {"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"};ptm = localtime(&buf.st_mtime);printf("%s %d %d:%d ",mon[ptm->tm_mon],ptm->tm_mday,ptm->tm_hour,ptm->tm_min);

4.readlink

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

功能:

读取链接文件本身的内容

参数:

pathname:链接文件的路径

buf:存放数据空间的首地址

bufsiz:最大存放数据字节数

返回值:

成功返回读到的字节个数

失败返回-1

#include "head.h"int main(int argc, const char *argv[])
{struct stat buf;int ret = 0;struct passwd *pwd = NULL;struct group *grp = NULL;struct tm *ptm = NULL;char *mon[12] = {"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"};char tmpbuff[1024] = {0};if (argc != 2){fprintf(stderr, "Usage:./a.out filename\n");return -1;}ret = lstat(argv[1], &buf);if (-1 == ret){perror("fail to stat");return -1;}#if 0switch (buf.st_mode & S_IFMT){case S_IFDIR:putchar('d');break;case S_IFREG:putchar('-');break;case S_IFSOCK:putchar('s');break;case S_IFLNK:putchar('l');break;case S_IFBLK:putchar('b');break;case S_IFCHR:putchar('c');break;case S_IFIFO:putchar('p');break;}
#endifif (S_ISREG(buf.st_mode)){putchar('-');}else if (S_ISDIR(buf.st_mode)){putchar('d');	}else if (S_ISCHR(buf.st_mode)){putchar('c');}else if (S_ISBLK(buf.st_mode)){putchar('b');}else if (S_ISLNK(buf.st_mode)){putchar('l');}else if (S_ISSOCK(buf.st_mode)){putchar('s');}else if (S_ISFIFO(buf.st_mode)){putchar('p');}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 (NULL == pwd){printf(" %d", buf.st_uid);}else {printf(" %s", pwd->pw_name);}grp = getgrgid(buf.st_gid);if (NULL == grp){printf(" %d", buf.st_gid);}else {printf(" %s", grp->gr_name);}printf(" %ld", 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", argv[1]);if (S_ISLNK(buf.st_mode)){readlink(argv[1], tmpbuff, sizeof(tmpbuff));printf(" -> %s", tmpbuff);}putchar('\n');return 0;
}

软链接和硬链接

1.软链接(符号链接)

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

过程:

软链接文件名——>inod——>数据块——>链接项的文件名——>inode——>数据块

ln -s 源文件 链接文件

如:ln -s file.txt  a.txt

2.硬链接

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

过程:

文件——>inode——>数据块

ln 源文件 链接文件

如:ln file.txt  b.txt 

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

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

相关文章

Python入门:常用模块—logging模块

logging日志的分级: debug(),info(),warning(),error(),critical() 5个级别 最简单用法 1 2 3 4 import logging logging.warning("user [mike] attempted wrong password more than 3 times") logging.critical("server is down") 输出&…

普中51单片机学习(二)

51单片机介绍 所需基础知识 基础数模电知识,简单的C语言。 PS:如果有不懂的直接通义千问。。。 什么是单片机 在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。 学习方法 多实…

Sqoop 入门基础

简介 Sqoop(SQL to Hadoop)是一个开源工具,用于在关系型数据库和Hadoop之间传输数据。它提供了一种快速高效的方式,将数据从关系型数据库导入到Hadoop集群进行分析,并支持将Hadoop集群中的数据导出到关系型数据库中。本…

智慧社区管理系统:构建未来的生活模式

在这个信息化、智能化的时代,我们期待的不再是简单的居住空间,而是一个集安全、便捷、舒适、环保于一体的智能化社区。为此,我们推出了全新的智慧社区管理系统,旨在将先进的科技力量引入社区管理,为居民提供更优质的生…

OpenProject + Rocky8安装

文章目录 1、概要2、整体架构流程3、准备4、安装5、openproject 配置5.1、第一步:OpenProject 版本选择5.2、第二步:PostgreSQL 支持5.3、第三步:Apache2 Web 服务器支持5.4、第四步:hostname 支持5.5、 第五步:服务器…

【Docker】Docker存储卷

文章目录 一、什么是存储卷二、为什么需要存储卷三、存储卷分类四、管理卷Volume创建卷方式一:Volume 命令操作方式二:-v 或者--mount 指定方式三:Dockerfile 匿名卷 操作案例Docker 命令创建管理卷Docker -v 创建管理卷Docker mount 创建管理…

unity学习(32)——跳转到角色选择界面(父子类问题)

新问题 应该是两个脚本之间缺少继承关系 its children 解决起来很简单,把ResceneScript也绑到canvas上就可以了 。 此时,在账号密码正确的情况下,是可以完成场景切换。 对应的代码如下: TMP_Text d GameObject.FindWithTag(&…

接口测试(postman/jmeter)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是接口测试 通常做的接口测试指的是系统对外的接口&am…

Window部署Nacos

Nacos 现在压缩包解压后,修改conf/application.properties 文件 取消注释,修改mysql连接方式 节点nacos.core.auth.enabled 改成true 设置节点nacos.core.auth.server.identity.key、nacos.core.auth.server.identity.value 设置secret秘钥,…

十大常见web漏洞及防范

十大常见web漏洞 一、SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。在设计程序,忽略了对输入字符串中夹带的S…

javascript选择器大全

目录 1.getElementsByTagName 2.getElementsByName 3.getElementById 4.getElementsByClassName 5.querySelector 6.querySelectorAll 1.getElementsByTagName 俗称标签选择器&#xff0c;可以根据标签名查找匹配到页面的元素对象&#xff0c;返回为一个数组。 <div&…

如何使用静态住宅ip代理进行Facebook群控?

在进行Facebook群控时&#xff0c;ip地址的管理是非常重要的&#xff0c;因为Facebook通常会检测ip地址的使用情况&#xff0c;如果发现有异常的使用行为&#xff0c;比如从同一个ip地址频繁进行登录、发布内容或者在短时间内进行大量的活动等等&#xff0c;就会视为垃圾邮件或…

springcloud-远程调用

微服务的远程调用 RestTemplate 在项目中&#xff0c;当我们需要远程调用一个 HTTP 接口时&#xff0c;我们经常会用到 RestTemplate 这个类。这个类是 Spring 框架提供的一个工具类。 实例化RestTemplate 创建配置类&#xff0c;实例化RestTemplate Configuration public clas…

【递归】:原理、应用与案例解析 ,助你深入理解递归核心思想

递归 1.基础简介 递归在计算机科学中&#xff0c;递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集 例如 递归遍历环形链表 基本情况&#xff08;Base Case&#xff09;&#xff1a;基本情况是递归函数中最简单的情况&#xff0c;它们通常是递…

揭示端侧大语言模型的无限潜力:多种量化模型,可以在个人电脑或者手机上安装部署使用,几行代码进行调研可以离线使用

揭示端侧大语言模型的无限潜力:多种量化模型,可以在个人电脑或者手机上安装部署使用,几行代码进行调研可以离线使用。 MiniCPM 是面壁智能与清华大学自然语言处理实验室共同开源的系列端侧大模型,主体语言模型 MiniCPM-2B 仅有 24亿(2.4B)的非词嵌入参数量, 总计2.7B参数…

频段划分学习射频知识的意义

一、射频电路设计与低频电路设计的不同点 随着频率提高&#xff0c;相应电磁波的波长与变得可与分立电路元件的尺寸相比拟时&#xff0c;电阻、电容和电感这些元件的电响应&#xff0c;将偏离他们的理想频率特性。以 WIFI 2.4G 频段为例&#xff0c;当频率为 2437MHz&#xff0…

Ubuntu安装wireguard服务端,windows连接

需求&#xff1a;想要随时随地远程到ubuntu电脑的内网中&#xff0c;ping通所有的内网ip&#xff0c;方便通过内网ip进行远程 一、ubuntu上安装配置wireguard服务 1&#xff0c;更新软件包并安装wireguard服务端软件 sudo apt update sudo apt install wireguard 2&#xff0…

Flutter学习1 - Android开发者快速上手

1、对应关系 概念对应关系 AndroidFlutter页面Activity和FragmentWidget视图ViewWidget页面跳转IntentNavigater网络库okHttphttp数据存储SharedPreference和SQLiteshared_preferences和sqflite 布局对应关系 AndroidFlutter布局文件xmlWidget线性布局LinearLayoutRow和Col…

在线图片生成工具:定制化占位图片的利器

title: 在线图片生成工具&#xff1a;定制化占位图片的利器 date: 2024/2/20 14:08:16 updated: 2024/2/20 14:08:16 tags: 占位图片网页布局样式展示性能测试响应式设计在线生成开发工具 在现代的网页设计和开发中&#xff0c;占位图片扮演着重要的角色。占位图片是指在开发过…

力扣日记2.20-【回溯算法篇】491. 非递减子序列

力扣日记&#xff1a;【回溯算法篇】491. 非递减子序列 日期&#xff1a;2023.2.20 参考&#xff1a;代码随想录、力扣 ps&#xff1a;放了个寒假&#xff0c;日记又搁置了三星期……&#xff08;下跪忏悔&#xff09; 491. 非递减子序列 题目描述 难度&#xff1a;中等 给你一…