,,linux stat函数讲解(整理)

,,linux stat函数讲解(整理)

本文主要介绍linux stat函数的讲解(整理),很不错,有参考价值。有需要的朋友可以参考一下。

stat函数讲解

头文件:

#包含系统/统计信息

#包括unistd.h

定义功能:

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

功能描述:

通过文件名获取文件信息,保存在buf指示的结构stat中。

返回值:

如果执行成功,则返回0,如果执行失败,则返回-1,错误代码存储在errno中。

错误代码:

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

ENOTDIR路径中的目录存在,但不是真正的目录。

ELOOP要打开的文件有太多的符号连接,最大数量是16个符号连接。

默认参数buf是一个无效指针,指向不存在的内存空间。

EAC被拒绝访问该文件

ENOMEM核心内存不足。

ENAMETOOLONG参数file_name的路径名太长。

#包含系统/统计信息

#包括unistd.h

#包含stdio.h

int main() {

struct stat buf

stat('/etc/hosts ',buf);

printf('/etc/hosts文件大小=%d\n ',buf . ST _ size);

}

-

结构状态

dev _ t st _ dev//文件的设备号

ino _ t st _ ino//节点

mode _ t st _ mode//文件的类型和访问权限

nlink _ t st _ nlink//这个文件的硬连接数,刚创建的文件的值是1。

uid _ t st _ uid//用户ID

gid _ t st _ gid//组ID

dev _ t st _ rdev//(设备类型)如果该文件是设备文件,则其设备号。

off _ t st _ size//文件字节数(文件大小)

无符号长整型st _ blksize//块大小(文件系统的I/O缓冲区大小)

无符号长整型st _ blocks//块数

time _ t st _ atime//上次访问时间

time _ t st _ mtime//上次修改时间

time _ t st _ ctime//上次更改的时间(引用属性)

};

前面描述的st_mode定义了以下情况:

文件类型的位掩码

S_IFSOCK 0140000 scoket

S _ IFLNK 0120000符号连接

S_IFREG 0100000通用文件

S_IFBLK 0060000块设备

S_IFDIR 0040000目录

S_IFCHR 0020000字符设备

S_IFIFO 0010000 FIFO

在s _ isud04000文件的执行位设置user-id

S_ISGID 02000文件的(执行时设置组id)位

S_ISVTX 01000文件的粘性位

S_IRUSR(S_IREAD) 00400文件所有者有读取权限。

文件所有者有写权限。

文件所有者拥有可执行的权限。

S_IRGRP 00040用户组有读取权限。

S_IWGRP 00020用户组具有可写权限。

S_IXGRP 00010用户组拥有可执行权限。

S_IROTH 00004其他用户有读取权限。

其他用户有写权限。

其他用户拥有可执行权限。

上面的文件类型定义了POSIX中的宏定义来检查这些类型:

S_ISLNK (st_mode)确定是否是符号连接。

S_ISREG (st_mode)是通用文件吗?

S_ISDIR (st_mode)是目录吗?

S_ISCHR (st_mode)是字符设备文件吗?

S_ISBLK (s3e)是FIFO吗?

S_ISSOCK (st_mode)是套接字吗?

如果一个目录有sticky bit (S_ISVTX),说明这个目录下的文件只能由文件所有者、目录所有者或root删除或重命名。

-

结构统计信息{

长f _ type//文件系统类型

long f _ bsize//块大小

长f _ blocks//多少钱?

long f _ bfree//空闲块

长f _ bavail//可用块

长f _ files//文件节点总数

long f _ ffree//自由文件节点

fsid _ t f _ fsid//文件系统id

long f _ namelen//文件名的最大长度

long f _ spare[6];//备用以备后用

};

stat、fstat和lstat函数(UNIX)

#包含系统/类型. h

#includesys/stat.h

int stat(const char * restrict pathname,struct stat * restrict buf);

提供文件名并获取文件的相应属性。文件没打开一般都是这种感觉。

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

通过文件描述符获取文件对应的属性。打开文件后执行此操作。

int lstat(const char * restrict pathname,struct stat * restrict buf);

连接文件

返回三个函数:0表示成功,1表示错误。

给定一个路径名,stat函数返回一个与指定文件相关的信息结构,fstat函数获取关于在描述符filedes上打开的文件的信息。lstat函数类似于stat,但是当命名文件是符号连接时,lstat返回关于符号连接的信息,而不是关于符号连接引用的文件的信息。

第二个参数是指向我们应该提供的结构的指针。这些函数填充buf指向的结构。这种结构的实际定义可能因实现而异,但其基本形式是:

结构状态

mode _ t st _ mode/*文件模式(权限)*/

ino _ t st _ ino/* I=节点号(序列号)*/

dev _ t st _ rdev/*特殊文件的设备号*/

nlink _ t st _ nlink/*链接数量*/

uid _ t st _ uid/*所有者的用户id */

gid _ t st _ gid/*所有者的组ID */

off _ t st _ size/*常规文件的字节大小*/

time _ t st _ atime/*上次访问的时间*/

time _ t st _ mtime/*上次修改时间*/

time _ t st _ ctime/*上次文件状态更改的时间*/

long st _ blksize/*最佳I/O块大小*/

长st _ blocks/*分配的512字节块的数量*/

};

请注意,除了最后两个成员,所有成员都是基本系统数据类型。我们将解释这个结构的每个成员以理解文件属性。

最常用的stat函数是ls-l命令,它可以获取文件的所有信息。

1函数是获取文件的属性(普通文件、目录、管道、套接字、字符、块())。

函数原型

#包含系统/统计信息

int stat(const char * restrict pathname,struct stat * restrict buf);

提供文件名并获取文件的相应属性。

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

通过文件描述符获取文件对应的属性。

int lstat(const char * restrict pathname,struct stat * restrict buf);

连接文件描述以获取文件属性。

2对应于文件的属性

结构状态

mode _ t st _ mode//模式、文件、目录等。对应于该文件

ino _ t st _ ino//inode节点号

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//对应于魏健内容的块数

};

您可以通过上面提供的函数返回一个保存文件信息的结构。

以上是边肖介绍的linux stat函数的讲解(整理)。希望对你有帮助。如果您有任何问题,请给我留言,边肖将及时回复您。非常感谢您对我们网站的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: