Linuxstat_linux内核编译的基本流程

Linuxstat_linux内核编译的基本流程stat函数讲解:表头文件:#include#include定义函数:intstat(constchar*file_name,structstat*buf);函数说明:通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值:执行成功则返回0,失败返回-1,错误代码存于errno错误代码:ENOENT参数file_name指定的文件不存在ENOT…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

stat函数讲解:

表头文件: #include

#include

定义函数: int stat(const char *file_name, struct stat *buf);

函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中

返回值: 执行成功则返回0,失败返回-1,错误代码存于errno

错误代码:

ENOENT 参数file_name指定的文件不存在

ENOTDIR 路径中的目录存在但却非真正的目录

ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接

EFAULT 参数buf为无效指针,指向无法存在的内存空间

EACCESS 存取文件时被拒绝

ENOMEM 核心内存不足

ENAMETOOLONG 参数file_name的路径名称太长

int stat(const char *file_name,struct stat *buf);

int fstat(int filedes,struct stat *buf);

stat 结构定义于:/usr/include/sys/stat.h 文件中

struct stat finfo;

stat( sFileName, &finfo );

int size = finfo. st_size;

struct stat {

mode_t st_mode; //文件对应的模式,文件,目录等

ino_t st_ino; //i-node节点号

dev_t st_dev; //设备号码

dev_t st_rdev; //特殊设备号码

nlink_t st_nlink; //文件的连接数

uid_t st_uid; //文件所有者

gid_t st_gid; //文件所有者对应的组

off_t st_size; //普通文件,对应的文件字节数

time_t st_atime; //文件最后被访问的时间

time_t st_mtime; //文件内容最后被修改的时间

time_t st_ctime; //文件状态(属性)改变时间

blksize_t st_blksize; //文件内容对应的块大小

blkcnt_t st_blocks; //文件内容对应的块数量

};

stat用来判断没有打开的文件,而fstat用来判断打开的文件.我们使用最多的属性是st_mode.通过着属性我们可以判断给定的文件是一个普通文件还是一个目录,连接等等.可以使用下面几个宏来判断.

S_ISLNK(st_mode):是否是一个连接.

S_ISREG是否是一个常规文件.

S_ISDIR是否是一个目录

S_ISCHR是否是一个字符设备.

S_ISBLK是否是一个块设备

S_ISFIFO是否是一个FIFO文件.

S_ISSOCK是否是一个SOCKET文件.

用法:

//定义一个结构体

struct stat m;

//用户输入的文件名(用来判断是否是目录)。

char *filename;

int a;

int n = stat(filename,&m);

a = S_ISDIR(m.st_mode);

如果a为真,则说明是目录,否则不是。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171794.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号