系统编程之文件IO(六)——获取文件属性(stat、fstat、lstat、struct stat)_文件io获得文件特征值?-程序员宅基地

技术标签: # 系统编程 文件IO  文件IO  

一、struct stat

系统已经定义好了
位于:<sys/stat.h>
在这里插入图片描述

struct stat {
     
    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;      //文件字节数(文件大小) 
    unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小) 
    unsigned long st_blocks;    //块数 
    time_t        st_atime;     //最后一次访问时间 
    time_t        st_mtime;     //最后一次修改时间 
    time_t        st_ctime;     //最后一次改变时间(指属性) 
};

二、stat、fstat、lstat

int stat(const char *path, struct stat *buf) //没打开
int fstat(int filedes, struct stat *buf)//打开了
int lstat(const char path, struct stat *buf)

path :文件路径
filedes :文件描述符

三、获取文件长度

  1. int file_size = lseek(fd, 0, SEEK_END)
//get file_size
    struct stat file1;
    //stat(argv[1], &file1);
    //fstat(fd,&file1);
    lstat(argv[1], &file1);

    printf("file_size = %ld\n", file1.st_size);

四、fstat、stat和lstat的区别:

int fstat(int filedes, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);

聪明人一眼就能看出来fstat的第一个参数是和另外两个不一样的,对!fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是 一个“文件描述符”,而另外两个则直接接受“文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。
stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat比stat多了一个l,因此它是有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而 stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)

参考文章:Linux中fstat、stat和lstat的用法与区别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_52592798/article/details/124194789

智能推荐

SQLALCHEMY的简单使用_sqlalchemy别名分组查询-程序员宅基地

文章浏览阅读764次。SQLAlchemy声明写这篇文章的目的只是为了自己在遇到问题时方便查找,文中会有SqlAlchemy官方文档中的内容。sqlalchemy是一个对象关系映射器, 提供了一种将用户定义的Python类与数据库表以及这些类(对象)的实例与相应表中的行关联起来的方法。ORM即Object - Relation - Mapping创建连接使用SQLAlchemy的第一步是创建一个数据库连接,这里使用的是mysql数据库from sqlalchemy import create_engineeng_sqlalchemy别名分组查询

Dell戴尔G7 7588换m.2 nvme固态硬盘+系统迁移_戴尔g7 7588是否支持nvme-程序员宅基地

文章浏览阅读2.2w次,点赞24次,收藏75次。先科普一下SATA是一种时下非常流行的串行硬盘接口规范, 是这个样子的PCIe是一种高速串行计算机扩展总线标准, 几乎任何扩展都可以通过PCIe连接, 比如显卡网卡硬盘磁盘阵列卡, 是这个样子的m.2接口是一种新的主机接口方案,可以兼容多种通信协议,如sata、PCIe、USB、HSIC、UART、SMBus等, 大概长这样nvme是一种用于PCIe的附加存储的接口和指令集标准, 数..._戴尔g7 7588是否支持nvme

pecl和pear 的区别和联系_phar pecl的区别-程序员宅基地

文章浏览阅读2.6k次。Pear:是PHP的扩展代码包,所有的扩展均以PHP代码的形式出现,功能强大,安装简单,甚至可以改改就用。使用的时候,要在代码中进行Include才能够使用。Pecl:是PHP的标准扩展,可以补充实际开发中所需的功能,所有的扩展都需要安装,在Windows下面以Dll的形式出现,在linux下面,需要单独进行编译,它的表现形式为根据PHP官方的标准用C语言写成,尽管源码开放但是一般人无_phar pecl的区别

排序——快速排序_序列有序时,快速排序需要移动元素吗-程序员宅基地

文章浏览阅读603次。定义: 在快速排序算法中,使用了分治策略,将要排序的序列分成两个子序列,然后递归地对子序列进行排序,直到整个序列排序完毕。步骤:1.在序列中选择一个关键元素作为轴;2.对序列进行重新排序,将比轴小的元素移到轴的前边,比轴大的元素移动到轴的后面。在进行划分之后,轴便在它最终的位置上;3.递归地对两个子序列进行重新排序:含有较小元素的子序列_序列有序时,快速排序需要移动元素吗

【学习之路】程序员如何学好C++的50条忠告荟萃 -程序员宅基地

文章浏览阅读607次。1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》;3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;4.不要被VC、BCB、BC、MC、TC等词汇所迷惑--他们都是集成开发环境,而我们要

python3.7安装matplotlib包踩过的坑_puthon 3.7 安转matplotlib-程序员宅基地

文章浏览阅读8.7k次,点赞7次,收藏33次。最简单的安装matplotlib包方法就是使用pip1、在官网https://pypi.org/project/matplotlib/#files下载你的电脑对应的版本注意看自己电脑的系统,cp37就是使用python3.7的把版本2、将下载的文件放在python中的Scripts文件夹下。(不知道Scripts在哪的,可用cmd在doc窗口下输入where python寻找python的安装路径)3、cmd打开doc窗口,使用pip进行安装。命令如下:pip install D:\U_puthon 3.7 安转matplotlib

随便推点

opencv中角点排序_opencv 棋盘格角点排序-程序员宅基地

文章浏览阅读6k次。// 角点检测.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;using namespace cv;#include #define max_corners 100 //初始定义角点个数typedef struct Corn_opencv 棋盘格角点排序

ActiveX 控件测试容器 (tstcon32.exe)_微软ocx控件容器 tstcon.exe的官方介绍-程序员宅基地

文章浏览阅读1.3k次。从 IDE 运行 tstcon32.exe在“工具”菜单上单击“ActiveX 控件测试容器”。随即出现“ActiveX 控件测试容器”工具。_微软ocx控件容器 tstcon.exe的官方介绍

web前端入门到实战:仿美团详情页与购物车源码-首页实现_商家列表 h5-程序员宅基地

文章浏览阅读1.3k次,点赞3次,收藏21次。效果图首先是index.html<!DOCTYPE html><html><head> <title>首页</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-..._商家列表 h5

PASCAL Visual Object Classes Challenge 2007(VOC 2007)数据集预处理_voc2007 trainval 提取图片-程序员宅基地

文章浏览阅读1.4k次。VOC 2007[1] 是一个多标签数据集,有 20 类。这里为 multi-label classification 任务做预处理,包括:将图片移到同一个目录(方便读取);数据划分(本身就已经分好 train/val 和 test 两部分);处理标签。Prepare[1] 有下载链,train/val 450M,test 430M。下下来就是 VOCtrainval_06-Nov-2007.tar 和 VOCtest_06-Nov-2007.tar 两个文件。以 test set 的文件为例_voc2007 trainval 提取图片

【python常用函数】——小波变换_pywt.cwt-程序员宅基地

文章浏览阅读2.6k次。// An highlighted blockvar foo = 'bar';连续小波变换中可用的小波:**A wide range of continous wavelets are now available. These include the following:** Gaussian wavelets (gaus1…``gaus8``) Mexican hat wavelet (mexh) Morlet wavelet (morl) Complex Gaussian wavelet_pywt.cwt

root域名服务器 gtld服务器_小程序搭建第一环节:服务器和域名-程序员宅基地

文章浏览阅读112次。小程序搭建准备工作服务器和域名第一步购买服务器该文章中的图片均可点击放大查看目前腾讯双十一的活动还没结束,针对项目组新成员,下面这款香港服务器的宽带峰值能跑到30M,完全碾压其他千元活动服务器,性价比是最高的。备注:如果已经错过了这次活动,关于服务器的购买请微信联系我,我会帮忙找到当下最适合的服务器。这里购买一年的原价显示是288元,但是腾讯双十一活动针对这款服务器有隐藏的100元代金券..._root 使用 @ 域名