c++ - 检查 Unix 中是否存在目录(系统调用)

我无法在网上找到解决问题的方法。

我想在 Unix 中调用一个函数,传入一个目录的路径,并知道它是否存在。 opendir() 如果目录不存在则返回错误,但我的目标不是实际打开,检查错误,如果没有错误则关闭它,而只是检查文件是目录还是不是。

请问有什么方便的方法吗?

最佳答案

在 POSIX 系统上有两个相关函数:stat() and lstat() .这些用于查明路径名是否引用了您有权访问的实际对象,如果是,则返回的数据会告诉您它是什么类型的对象。 stat()之间的区别和 lstat()是如果你给的名字是一个符号链接(symbolic link),stat()跟随符号链接(symbolic link)(或链接,如果它们链接在一起)并报告链接链末端的对象,而 lstat()报告符号链接(symbolic link)本身。

#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 — block 设备
  • S_ISFIFO ——先进先出
  • S_ISLNK — 符号链接(symbolic link)
  • S_ISSOCK — socket

(有些系统还提供一些其他文件类型;例如,S_ISDOOR 在 Solaris 上可用。)

https://stackoverflow.com/questions/3828192/

相关文章:

c++ - 是否可以防止对象的堆栈分配并只允许使用 'new' 对其进行实例化?

c++ - 不允许指向不完整类类型的指针

c++ - 如何自己编写幂函数?

c++ - 在没有实例的情况下获取 std::array 的大小

c++ - 为什么要使用断言?

c++ - 私有(private)构造函数

c++ - C++ 中的常量和编译器优化

c++ - 字符串文字中的符号\0 是什么意思?

c++ - 如何以编程方式确定表达式在 C++ 中是右值还是左值?

c++ - C++ 中 *& 和 **& 的含义