检查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 structurest_mode字段。


    你可以使用test -d

    链接地址: http://www.djcxy.com/p/17483.html

    上一篇: Checking if a directory exists in Unix (system call)

    下一篇: When to wrap quotes around a shell variable?