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") 输出&…

Day49 647 回文子串 516 最长回文子序列

647 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 方法一:动态规划: 采用一个二维的dp数组&#xf…

普中51单片机学习(二)

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

Sqoop 入门基础

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

【编程】C++语言编程规范-2

编程实践 结合C Effective系列参考树、尤其是工程经验教训的总结。 并发 除非必要,尽量少用线程。多线程编程要守护好内存,使用atomic、mutex、condition variable、future、semaphore、latch、barrier等同步机制避免数据竞争。尽量缩小临界区&#x…

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

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

OpenProject + Rocky8安装

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

从零学算法172

172.给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * … * 3 * 2 * 1 示例 1: 输入:n 3 输出:0 解释:3! 6 ,不含尾随 0 示例 2: 输入:n 5 输出&…

【Docker】Docker存储卷

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

懒加载实践记录

1.原理 懒加载的原理是通过监听用户的浏览行为,当用户滚动到可视区域内时,再进行资源的加载。这样可以避免一次性加载过多的资源,从而减少页面的加载时间和带宽消耗。 2.主要使用场景 懒加载适用于图片较多,页面列表较长(长列表)…

Linux——常用特殊符号介绍

1、# 井号 (comments) 这几乎是个满场都有的符号,除了先前已经提过的"第一行" #!/bin/bash 井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行。 # This line is comments.…

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

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

嵌入式Linux学习DAY20

文件io 文件io和标准io的区别: 1.标准io是库函数,是对系统调用的封装 2.文件io是系统的调用,是Linux内核中的函数接口 3.标准io是有缓存的 4.文件io是没有缓存的 操作步骤 打开->读写->关闭 打开文件:open 功能&am…

了解不同颜色油封的用途

在机械领域,油封是保证各种设备平稳运行的关键部件。为什么油封会有很多颜色。本文旨在阐明不同颜色油封的用途及其意义。 油封有多种颜色,包括黑色、棕色、绿色和蓝色等。乍一看,这些颜色似乎只是一种审美选择。然而,它们有更实…

接口测试(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…