检查Unix中是否存在目录(系统调用)
我无法在网上找到解决我的问题的方法。
我想在Unix中调用一个函数,传递一个目录的路径,并知道它是否存在。 如果一个目录不存在, opendir()返回一个错误,但是我的目标不是实际打开,检查错误,如果没有错误,关闭它,而只是检查一个文件是否是一个目录。
请问有什么方便的方法吗?
在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...
}
如果函数指示它成功,则使用<sys/stat.h>的S_ISDIR()宏来确定文件是否实际上是一个目录。
您还可以使用其他S_IS*宏检查其他文件类型:
S_ISDIR - 目录 S_ISREG - 普通文件 S_ISCHR - 字符设备 S_ISBLK - 块设备 S_ISFIFO - FIFO S_ISLNK - 符号链接 S_ISSOCK - 套接字 (某些系统也提供其他几种文件类型;例如, S_ISDOOR在Solaris上可用。)
您可以通过传递该目录的名称作为第一个参数来使用stat系统调用。 如果该目录存在,则返回0 ,否则返回-1 ,并将errno设置为ENOENT
编辑:
如果返回值为0 ,则需要额外检查以确保参数实际上是一个目录,而不是文件/符号链接/字符特殊文件/ blk特殊文件/ FIFO文件。 你可以使用这个stat structure的st_mode字段。
你可以使用test -d
