Jon*_*ler 106
POSIX系统有两个相关的功能:stat()和lstat().这些用于查明路径名是否指向您有权访问的实际对象,如果是,则返回的数据会告诉您它是什么类型的对象.stat()和之间的区别在于lstat(),如果您给出的名称是符号链接,则stat()遵循符号链接(或链接在一起的链接)并在链接链的末尾报告对象,而lstat()在符号链接本身上报告.
#include <sys/stat.h>
struct stat sb;
if (stat(pathname, &sb) == 0 && S_ISDIR(sb.st_mode))
{
...it is a directory...
}
Run Code Online (Sandbox Code Playgroud)
如果函数指示它成功,则使用S_ISDIR()宏<sys/stat.h>来确定该文件是否实际上是一个目录.
您还可以使用其他S_IS*宏检查其他文件类型:
S_ISDIR - 目录S_ISREG - 常规文件S_ISCHR - 角色设备S_ISBLK - 阻止设备S_ISFIFO - FIFOS_ISLNK - 符号链接S_ISSOCK - 插座(某些系统也提供了一些其他文件类型; S_ISDOOR例如,可在Solaris上使用.)
您可以stat通过将目录名称作为第一个参数传递给系统调用.如果目录存在,0则返回else,返回else -1并将errno设置为ENOENT
编辑:
如果返回值是0您需要额外检查以确保参数实际上是目录而不是文件/ symlink/char特殊文件/ blk特殊文件/ FIFO文件.你可以利用这个st_mode领域stat structure.