首先隆重介绍的是一个非常重要的”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则为文件夹。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)