第二十七节 Linux系统编程- Linux系统编程管理文件和目录-stat 函数组(二)

本文深入探讨了Linux系统编程中的stat函数组,包括stat(2)、fstat和lstat的用法。通过查看man文档,解释了它们的功能、参数和返回值。还介绍了如何创建stat.c源码文件进行实践,并展示了编译运行测试的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.

第一:

实验-stat 函数组

1)如下图所示,使用命令“man stat”查看 stat 函数组的文档

2)打开之后如下图所示,stat(1)是属于 linux 命令的知识,如果想学习可以看一下,不是需要的 stat 函数用法。

3)下翻到“SEE ALSO”,如下图所示,可以看到有 stat(2)也,(2)表示内核提供的服务调用或者函数,是需要的。

5)退出后,然后使用命令“man 2 stat”,如下图所示。

6)如下图所示,可以看到函数的头文件以及函数组。

如下图所示,可以看到保存文件的结构体 struct stat,如下图所示,可以看到非常详细的结构成员注释。

下翻一下,可以看到很多的宏定义解释,这些具体用到的时候可以来查阅,如下图所示,
是结构成员 st_mode 的参数。

在学习函数的调用前,最后看一下“SEE ALSO”,如下图所示。

 

7)其实下面对于系统函数或者 API 的介绍,在 man 文档中都有介绍,大家可以自己尝试着
看一下部分英文的内容。

a)函数 int stat(const char *path, struct stat *buf);
参数*path:文件路径。
参数*buf:文件信息。
返回值:成功为 0,否则为-1。

b)函数 int fstat(int fd, struct stat *buf);
参数 fd:文件描述符。
参数*buf:文件信息
返回值:成功为 0,否则为-1。

 

c)函数 int lstat(const char *path, struct stat *buf);

参数*path:文件路径。
参数*buf:返回文件的信息,针对符号链接,lstat 返回链接本身,而不是而非目标文件;
stat 返回的是目标文件。链接可以类比 window 下的快捷方式。
返回值:成功为 0,否则为-1。

 

 

第二:

stat 函数组例程

新建文件 stat.c,用于学习 stat 函数组

#include <stdio.h>
//通过man文档可以查看到stat函数组头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

//open函数的参数头文件
#include <fcntl.h>

//通过 main 函数可以传参数,也就是文件的路径
int main(int argc,char *argv[])
{
	struct stat groupstat;
	int fd,ret;
	
    //检测是否有传入参数
	if(argc <2){
		printf("\nPlease input file path\n");
		return 1;
	}

//stat函数测试
    //使用 stat 读取文件的信息,如果路径不对则打印提示信息	
	ret = stat(argv[1],&groupstat);
	if(ret){
		printf("Please make sure file path\n");
		return 1;
	}
    //打印文件的 inode 信息
	printf("stat function test , %s of st_ino inode is %ld\n",argv[1],groupstat.st_ino);
	
//fstat函数测试
    //使用 open 函数获取文件句柄
	fd = open(argv[1],O_RDWR|O_NOCTTY|O_NDELAY);
    //使用 fstat 读取文件的信息,如果路径不对则打印提示信息
	if(fd<0)
	{
		printf("Please make sure file path\n");
		return 1;
	}
	ret = fstat(fd,&groupstat);
	if(ret){
		printf("Please make sure file path\n");
		return 1;
	}
    //打印文件的 inode 信息
	printf("fstat function test , %s of st_ino inode is %ld\n",argv[1],groupstat.st_ino);
	
//lstat函数测试	
    //使用 lstat 读取文件的信息,如果路径不对则打印提示信息
	ret = lstat(argv[1],&groupstat);
	if(ret){
		printf("Please make sure file path\n");
		return 1;
	}
    //打印文件的 inode 信息
	printf("lstat function test , %s of st_ino inode is 
 %ld\n",argv[1],groupstat.st_ino);

	return 0;
}

 

第三:

 编译运行测试

1)如下图所示,进入“/home/linuxsystemcode”目录,使用命令“mkdir CatlogFile”,进入新建的 CatlogFile 目录,如下图所示。

2)然后将源码 stat.c 拷贝到该目录下,使用命令
“arm-none-linux-gnueabi-gcc -o stat stat.c -static”编译,生成文件“stat”,如下图所示。

3)把文件拷贝到挂载点

4)开发板挂载后编译

将编译成的可执行文件 stat 以及 stat .c(用来测试)文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值