判断文件(快捷方式文件)存在的方式及对应区别(fstat、stat和lstat)

判断文件(快捷方式文件)存在的方式及对应区别(fstat、stat和lstat),第1张

stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。

首先隆重介绍的是一个非常重要的”VIP”人物,他是fstat, stat和lstat三者都要用到的一个结构体类型,名字叫做struct stat。可以说,没有这个struct stat的支持,上述三个系统调用将寸步难行。

这个struct stat结构体在不同的UNIX/Linux系统中的定义是有小的区别的,但你完全不用担心,这并不会影响我们的使用。

在struct stat结构体中我们常用的且各个平台都一定有的域是:

我分别提取了solaris(UNIX)和fedora(Linux)的struct stat结构体的原始定义:大家可以自己比对一下便可以发现两者确实有所不同,但主要的域是完全相同的。

solaris的struct stat定义:

fedora的struct stat定义:

大家一定注意到了,在上面列举域的时候,我在st_mode处使用了黑体橘红色标识,原因在于这个域不像其他域那么容易使用,其他的域的值显而易见,而st_mode域是需要一些宏予以配合才能使用的。其实,通俗说,这些宏就是一些特定位置为1的二进制数的外号,我们使用它们和st_mode进行”&” *** 作,从而就可以得到某些特定的信息。

文件类型标志包括:

还有一些用于帮助确定文件类型的宏定义,这些和上面的宏不一样,这些是带有参数的宏,类似与函数的使用方法:

我们已经学习完了struct stat和各种st_mode相关宏,现在就可以拿它们和stat系统调用相互配合工作了!

聪明人一眼就能看出来fstat的第一个参数是和另外两个不一样的,对!fstat区别于另外两个系统调用的地方在于,fstat系统调用接受的是 一个“文件描述符”,而另外两个则直接接受“文件全路径”。文件描述符是需要我们用open系统调用后才能得到的,而文件全路经直接写就可以了。

stat和lstat的区别:当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat比stat多了一个l,因此它是有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat当然不会放过。而 stat系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)【链接文件相当于快捷方式,不清楚的请查阅软链接的相关资料】

在本文章中,您将学习如何开发一个C文件是否存在的函数,该函数使用各种C标准库函数检查文件是否存在。

有时,您希望在读取或写入文件之前检查文件是否存在。但是,C语言没有提供任何标准函数来检查文件是否存在。

幸运的是,您可以使用标准库中的其他函数来开发自己的函数,检查文件是否存在。我们将用来检查文件是否存在的函数有:

在第一种方法中,您将尝试使用fopen()函数从文件中读取数据。如果可以从文件中读取数据,则表示文件存在,否则不存在。

下面演示了如何使用fopen()函数来检查文件是否存在:

该函数接受一个文件名,如果文件存在则返回true。否则,返回0。

函数的作用是:读取文件的所有属性,包括文件大小、创建日期和修改日期。如果文件不存在,stat()函数返回-1,否则返回0。stat()函数包含在ys/stat.h标准库中。

下面演示如何使用stat()函数来检查文件是否存在:

函数的作用是:检查一个文件是否可以被用户读/写/执行。它可以用来检查文件是否存在:

*filename是要检查的文件的路径。how标志的有效值是

下面的程序演示了如何使用access()函数来检查文件的存在性:

varfs=require("fs")varstat=fs.lstatSync("./xx")console.log(stat.isDirectory())如果返回结果为true则为文件夹。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11920300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存