struct stat
是一个用于保存文件或目录的属性信息的结构体。它在标准库中定义,并在<sys/stat.h>
头文件中声明。
struct stat
结构体的定义如下:
struct stat {
dev_t st_dev; /**< 文件所在设备的ID */
ino_t st_ino; /**< 文件的i-node号 */
mode_t st_mode; /**< 文件的类型和访问权限 */
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; /**< 文件的最后状态更改时间 */
blksize_t st_blksize; /**< 文件系统I/O缓冲区的优化大小 */
blkcnt_t st_blocks; /**< 文件占用的块数 */
};
struct stat
结构体的成员包含了文件或目录的各种属性信息,包括:
st_dev
:文件所在设备的ID。st_ino
: 文件的i-node号。st_mode
:文件的类型和访问权限。st_nlink
:文件的硬链接数。st_uid
:文件所有者的用户ID。st_gid
:文件所有者的组ID。st_size
:文件大小(字节数)。st_atime
:文件的最后访问时间。st_mtime
:文件的最后修改时间。st_ctime
:文件的最后状态更改时间。st_blksize
:文件系统I/O缓冲区的优化大小。st_blocks
:文件占用的块数。
通过调用stat()
函数,填充一个struct stat
结构体变量,可以获取文件或目录的这些属性信息,然后利用这些信息进行相应的操作。比如确定某个地址是文件还是文件夹的例子为:
//读取这个文件/夹 ,file变量为某个地址
struct stat st;
int res = stat(file,&st);
if (res == -1)
{
printf("404 file is not Found!\n");
return -1;
}
if(S_ISDIR(st.st_mode))
{
//把文件夹的内容发送给客户端;
printf("this path is dir! path=%s\n",file);
}
else
{
//把文件的内容发送给客户端;
printf("this path is file! path=%s\n",file);
}