Linux 系统IO函数之stat、lstat函数

devtools/2024/9/23 2:19:39/

1、stat函数

要点:
int stat(const char *pathname, struct stat *statbuf);

作用:查看文件的信息

man 2 stat

在这里插入图片描述

/return value

在这里插入图片描述

1、stat结构体:

在这里插入图片描述
2、sturct stat 结构体中 st_mode 的含义(文件的类型和存取的权限):

st_mode是个32位的整型变量,不过现在的linux操作系统只用了低16位(估计是鉴于以后拓展的考虑)

在这里插入图片描述

File type 属性区域,位于bit12 ~ bit15	

在现代linux操作系统上文件类型共分为7种,分别是:

1、普通文件(regular file)

2、目录(directory)

3、字符设备(character device)

4、块设备(block device)

5、管道(FIFO)

6、符号链接文件(symbolic link)

7、套接字文件(socket)

详情看 sturct stat 结构体中 st_mode 的含义

(st_mode & S_IFMT) == S_IFREG 通过与 掩码 与&运算 可以判断st_mode是不是一个普通文件

总结:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);作用:获取一个文件相关的一些信息参数:- pathname:操作的文件的路径- statbuf:结构体变量,传出参数,用于保存获取到的文件的信息返回值:成功:返回0失败:返回-1 设置errno

测试:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>int main() {struct stat statbuf;int ret = stat("a.txt", &statbuf);if(ret == -1) {perror("stat");return -1;}printf("size: %ld\n", statbuf.st_size);return 0;
}

2、lstat函数

要点:
int lstat(const char *pathname, struct stat *statbuf);

在这里插入图片描述

软链接 lrwxrwxrwx b.txt -> a.txt

petri@XX:~/lesson01/05_io$ touch a.txt
petri@XX:~/lesson01/05_io$ ln -s a.txt b.txtpetri@XX:~/lesson01/05_io$ ls -l
total 2
-rw-r--r-- 1 petri petri     0 Apr 22 18:34  a.txt
lrwxrwxrwx 1 petri petri     5 Apr 22 18:35  b.txt -> a.txtpetri@XX:~/lesson01/05_io$ stat b.txtFile: b.txt -> a.txtSize: 5               Blocks: 0          IO Block: 512    symbolic link
Device: 2h/2d   Inode: 212232132439866878  Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/   petri)   Gid: ( 1000/   petri)
Access: 2024-04-22 18:35:14.200056400 +0800
Modify: 2024-04-22 18:35:14.200056400 +0800
Change: 2024-04-22 18:35:14.200056400 +0800Birth: -

b.txt大小为 5 ,此时打开b.txt看到的其实是a.txt,因此stat b.txt获取的其实是它指向的文件的信息。
l表示软连接,此时如果想获取b.txt的信息,就需要用到 lstat 这个函数了。

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

在这里插入图片描述


http://www.ppmy.cn/devtools/22386.html

相关文章

陪诊小程序的市场潜力与发展趋势研究

随着社会的快速发展和人口老龄化的加剧&#xff0c;医疗服务需求日益增长&#xff0c;而陪诊服务作为医疗服务的重要补充&#xff0c;正逐渐受到人们的关注和青睐。陪诊小程序作为一种便捷、高效的陪诊服务平台&#xff0c;其市场潜力和发展趋势值得关注。 一、市场潜力分析 人…

Nerf的网络结构以及工作原理

NeRF&#xff08;神经辐射场&#xff0c;Neural Radiance Fields&#xff09;网络的原理基于体积渲染和深度学习的技术&#xff0c;用于从部分2D图像集生成复杂3D场景的新视图。 NeRF的核心思想是将连续场景表示为一个5D输入的神经辐射场。具体而言&#xff0c;它直接从空间位…

Ruby语言介绍要点难点代码案例参考实际应用举例

Ruby 是一种动态、面向对象的编程语言&#xff0c;最初由日本程序员松本行弘&#xff08;Yukihiro Matsumoto&#xff09;于1995年创建。它以简洁、优雅的语法著称&#xff0c;致力于提高开发者的生产力和乐趣。以下是关于 Ruby 的要点、难点、代码案例参考以及实际应用举例&am…

找不到msvcp100.dll无法继续执行代码的多种解决方法

是使用电脑进行工作的时候&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp100.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;本文将介绍5种常见的解决方法&#xff0c;帮助大家快速恢复计算机的正常运行。 一…

阿赵Json工具AzhaoJson的Lua版本

大家好&#xff0c;我是阿赵。   之前分享了AzhaoJson的C#版本&#xff0c;这里顺便分享一下Lua的版本&#xff1a; AzhaoJson.lua: require "util/jsonParser"AzhaoJson {}--lua table转json字符串 function AzhaoJson.Encode( tab )local str jsonParser.enco…

WebStorm使用CNPM

简介 1、Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c; 2、cnpm是淘宝NPM镜像 3、WebStorm则是一款功能强大的JavaScript集成开发环境&#xff08;IDE&#xff09; 安装Node.js和cnpm 安装Node.js&#xff1a;首先&#xff0c;你需要从Node.js官方网站下…

iOS 64位程序调试环境搭建

一、背景 调试ios程序经常使用gdb&#xff0c;但是gdb还未支持arm64&#xff0c;需要使用XCode的lldb调试IOS下64位程序。因为xcode默认调试工具是lldb&#xff0c;开始各种尝试在xcode中使用Debug-》Attach to Process 直接attach进程&#xff0c;但是只能看见进程却无法挂接。…

Python网络爬虫项目开发实战:怎么解决数据抓取

注意&#xff1a;本文的下载教程&#xff0c;与以下文章的思路有相同点&#xff0c;也有不同点&#xff0c;最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程&#xff1a;Python网络爬虫项目开发实战_数据抓取_编程案例解析实例详解课程教程.pdf 数据抓取&#xff0c;…