我无法在网上找到解决我的问题的方法。
我想在 Unix 中调用一个函数,传入一个目录的路径,并知道它是否存在。 opendir()
如果目录不存在则返回错误,但我的目标不是实际打开,检查错误,如果没有错误则关闭它,而只是检查文件是否为目录。
请问有什么方便的方法吗?
原文由 Jary 发布,翻译遵循 CC BY-SA 4.0 许可协议
另一种简单的方法是:
int check(unsigned const char type) {
if(type == DT_REG)
return 1;
if(type == DT_DIR)
return 0;
return -1;
}
然后,您可以将 struct dirent* 对象的 d_type 传递给 检查 函数。
如果检查返回 1,则该路径指向常规文件。
如果检查返回 0,则该路径指向一个目录。
否则,它既不是文件也不是目录(可以是块设备/符号链接等)
原文由 Aishwary Dewangan 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
POSIX 系统上有两个相关函数: stat() 和 lstat() 。这些用于查明路径名是否引用了您有权访问的实际对象,如果是,则返回的数据会告诉您它是什么类型的对象。
stat()
和lstat()
之间的区别在于,如果您给出的名称是符号链接,则stat()
跟随符号链接(或链接,如果它们是一起)并报告链接链末端的对象,而lstat()
报告符号链接本身。如果函数显示成功,则使用
<sys/stat.h>
中的 S_ISDIR() 宏来确定文件是否实际上是目录。您还可以使用其他
S_IS*
宏检查其他文件类型:S_ISDIR
目录S_ISREG
常规文件S_ISCHR
字符设备S_ISBLK
块设备S_ISFIFO
— 先进先出S_ISLNK
— 符号链接S_ISSOCK
插座(有些系统也提供一些其他文件类型;例如,
S_ISDOOR
在 Solaris 上可用。)