IO进程线程(四)文件IO之文件属性、目录操作

2024-06-03 22:52

本文主要是介绍IO进程线程(四)文件IO之文件属性、目录操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、文件属性信息

(一)stat函数

1. 定义

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);功能:获取文件的属性信息参数:pathname:文件的路径和名字statbuf:用来保存文件属性信息的缓冲区的首地址返回值:成功  0失败  -1  重置错误码// struct stat 结构体说明
struct stat {dev_t     st_dev;         /* 磁盘的设备号 */ino_t     st_ino;         /* Inode号 */mode_t    st_mode;        /* 文件的类型和权限 */权限:(低九位)st_mode & 0777 == 文件的权限类型:S_IFMT     0170000   获取类型的掩码S_IFSOCK   0140000   套接字文件S_IFLNK    0120000   软链接文件S_IFREG    0100000   普通文件S_IFBLK    0060000   块设备文件S_IFDIR    0040000   目录文件S_IFCHR    0020000   字符设备文件S_IFIFO    0010000   管道文件例如:判断文件是否是普通文件if((stat.st_mode & S_IFMT) == S_IFREG){//普通文件}或者:if(S_ISREG(stat.st_mode)){//普通文件}//其他类型文件判断方式同理nlink_t   st_nlink;       /* 硬链接个数 */uid_t     st_uid;         /* 所属用户的id */gid_t     st_gid;         /* 所属组的id */dev_t     st_rdev;        /* 设备id (字符或者块) */off_t     st_size;        /* 总大小  单位:字节 */blksize_t st_blksize;     /* 文件系统块的大小 */blkcnt_t  st_blocks;      /* 块的个数 */struct timespec st_atim;  /* 最后一次被访问的时间 */struct timespec st_mtim;  /* 最后一次被修改的时间 */struct timespec st_ctim;  /* 最后一次状态改变的时间 *///方便我们访问秒数的宏定义#define st_atime st_atim.tv_sec      /* Backward compatibility */#define st_mtime st_mtim.tv_sec#define st_ctime st_ctim.tv_sec
};
  • 注:lstat
  • 功能和stat一模一样 唯一的区别是 当判断的文件是 软链接文件时
    stat获取的是被链接的文件的属性 而 lstat 获取的是链接文件本身的属性
    int lstat(const char *pathname, struct stat *statbuf);

(二)getpwuid/getgrgid

1. getpwuid

#include <sys/types.h>
#include <pwd.h>
struct passwd *getpwuid(uid_t uid);
功能:根据uid获取用户信息
参数:uid:用户id
返回值:成功  struct passwd 指针失败 NULL  重置错误码
struct passwd {char   *pw_name;       /* 用户名 */char   *pw_passwd;     /* 是否有密码 */uid_t   pw_uid;        /* 用户id */gid_t   pw_gid;        /* 组id */char   *pw_gecos;      /* 描述字段 */char   *pw_dir;        /* 家目录 */char   *pw_shell;      /* 默认命令行解析器 */
};

2. getgrgid

#include <sys/types.h>
#include <grp.h>
struct group *getgrgid(gid_t gid);
功能:根据组id获取组信息
参数:gid:组id
返回值:成功  struct group 指针失败 NULL  重置错误码
struct group {char   *gr_name;        /* 组名 */char   *gr_passwd;      /* 是否有密码 */gid_t   gr_gid;         /* 组id */char  **gr_mem;         /* 忽略即可 */
};

二、目录操作

(一)opendir

#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
功能:打开一个目录
参数:name:要打开的目录的名字
返回值:成功 目录流指针失败 NULL 重置错误码

(二)readdir

#include <dirent.h>
struct dirent *readdir(DIR *dirp);
功能:读取目录下内容
参数:dirp:目录流指针
返回值:成功  struct dirent 指针失败或者读到结尾 NULL  重置错误码struct dirent {ino_t          d_ino;       /* Inode号 */off_t          d_off;       /* 无需关注 */unsigned short d_reclen;    /* 不是文件的大小 也无需关注 */unsigned char  d_type;      /* 文件的类型 不支持所有文件系统 */DT_BLK      This is a block device.DT_CHR      This is a character device.DT_DIR      This is a directory.DT_FIFO     This is a named pipe (FIFO).DT_LNK      This is a symbolic link.DT_REG      This is a regular file.DT_SOCK     This is a UNIX domain socket.char           d_name[256]; /* 文件名 一般只关注这一项 */
};

(三)closedir

#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);
功能:关闭目录
参数:dirp:目录流指针
返回值:成功 0失败 -1 重置错误码

这篇关于IO进程线程(四)文件IO之文件属性、目录操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028341

相关文章

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监