Linux系统编程09-stat和lstat

在Linux中,stat函数用于获取文件的属性信息,包括文件大小、创建时间、修改时间等。

头文件:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

函数:

int stat(const char *pathname, struct stat *statbuf);
    作用: 获取一个文件相关的一些信息, 
        如果去获取一个软连接,那么获取的是指向的文件的信息
    参数:
        - pathname: 操作的文件的路径
        - statbuf: 结构体变量,传出参数,用于保存获取到的文件信息
    返回值:
        成功: 0
        失败: -1, 设置errno

int lstat(const char *pathname, struct stat *statbuf);
    作用: 获取软连接文件本身的信息,而不是指向文件的信息
    参数:
        - pathname: 操作的文件的路径
        - statbuf: 结构体变量,传出参数,用于保存获取到的文件信息
    返回值:
        成功: 0
        失败: -1, 设置errno

stat 结构体:
struct stat {
    dev_t st_dev; // 文件的设备编号
    ino_t st_ino; // 节点
    mode_t st_mode; // 文件的类型和存取的权限
    nlink_t st_nlink; // 连到该文件的硬连接数目
    uid_t st_uid; // 用户ID
    gid_t  st_gid; // 组ID
    dev_t st_rdev; // 设备文件的设备编号
    off_t st_size; // 文件字节数(文件大小)
    blksize_t st_blksize; // 块大小
    blkcnt_t st_blocks; // 块数
    time_t st_atime; // 最后一次访问时间
    time_t st_mtime; // 最后一次修改时间
    time_t st_ctime; // 最后一次改变时间(指属性)
};

实例:获取文件信息c

stat.c

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <time.h>
#include <sys/time.h>

int main(int argc, char const *argv[])
{
    struct stat statbuf;
    int ret = stat("hello.txt", &statbuf);
    if (ret == -1)
    {
        perror("stat err");
        return -1;
    }

    struct tm t;
    char date_time[64];
    strftime(date_time, sizeof(date_time), "%Y-%m-%d %H:%M:%S", 					
             localtime_r(&statbuf.st_atim.tv_sec, &t));
    printf("size: %ld\n", statbuf.st_size);
    printf("second: %ld\n", statbuf.st_atim.tv_sec);
    printf("date: %s\n", date_time);
    return 0;
}

运行程序:

size: 112
second: 1665735924
date: 2022-10-14 16:25:24
posted @ 2022-10-14 22:07  言叶以上  阅读(59)  评论(0编辑  收藏  举报