从我的家庭作业:为什么我需要stat来检查一个目录是否已经存在?
备份文件存储在一个名为.mybackup一个隐藏目录,其中 你的程序造成的,如果需要的话。要创建一个目录,使用mkdir()函数(详情请点击这里) ,但一定要检查 目录是否已经存在(使用stat()或检查E-mail为 )。如果该目录已经存在,请不要覆盖它。
我以为如果目录已经存在,mkdir本质上返回-1。我确实在某个地方读过。我错了吗?
从我的家庭作业:为什么我需要stat来检查一个目录是否已经存在?
备份文件存储在一个名为.mybackup一个隐藏目录,其中 你的程序造成的,如果需要的话。要创建一个目录,使用mkdir()函数(详情请点击这里) ,但一定要检查 目录是否已经存在(使用stat()或检查E-mail为 )。如果该目录已经存在,请不要覆盖它。
我以为如果目录已经存在,mkdir本质上返回-1。我确实在某个地方读过。我错了吗?
mkdir
对于任何错误都返回-1。因此,要区分错误,即要发现目录是否已经存在,则应使用stat
函数或在mkdir
返回-1后检查errno
的EEXIST
。
if(mkdir(".mybackup", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) == -1)
{
if(errno == EEXIST)
{
// Directory already exists, do something
}
}
哦,很好的例子。非常感谢。 – Aerovistae
请注意,您需要包含
mkdir
功能可能会失败的原因有很多:
[EACCES] 搜索权限被拒绝的路径前缀的一个组成部分,或者拒绝写入权限的目录的父目录被创建。
[EEXIST] 指定的文件存在。
[ELOOP] 循环存在于解析路径参数期间遇到的符号链接中。
[EMLINK] 父目录的链接数将超过{LINK_MAX}。
[ENAMETOOLONG] 路径参数的长度超过{PATH_MAX}或路径名组件长于{NAME_MAX}。
[ENOENT] 由路径指定的路径前缀的组件不会命名现有目录,或路径是空字符串。
[ENOSPC] 文件系统没有足够的空间容纳新目录的内容或扩展新目录的父目录。
[ENOTDIR] 路径前缀的组件不是目录。
[EROFS] 父目录驻留在只读文件系统上。 的MKDIR()函数可能会失败,如果:
[ELOOP] 比路径参数的分辨率过程中遇到{SYMLOOP_MAX}符号链接更多。
[ENAMETOOLONG] 由于在路径参数的解析中遇到符号链接,所以替换的路径名字符串的长度超过了{PATH_MAX}。
如果函数返回-1
你不能没有检查errno
确保其特定错误的,这就是为什么它被建议。
+1,典型用户不太可能在任何现代文件系统上达到此限制,但这些确实发生在现场! –
我建议检查[此讨论](http://stackoverflow.com/questions/6314042/stat-vs-mkdir-with-eexist):它不是重复的,但非常接近它。 ) – raina77ow