Linux API 判断目录是否存在

//create folder

struct stat statbuf;
if ( 0 != stat("./myfolder",&statbuf))   //If failed to get the status of this directory
{
     if (ENOENT == errno) //If folder  not exist
     {
           if (-1 == mkdir("./myfolder",S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH|S_IXOTH)) {     -------------注意这里设置的mode并不是最终myfolder的mode,他是mode与系统umask计算后的值,即是个不确定的值。所以我们在创建完目录后通过api chmod再来设置一下目录的权限
                            cout << "Failed to create folder in current directory." << endl;
                    }
           if (-1 == chmod("./myfolder",S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH|S_IXOTH)) { -----------------注意,API中mode不能用类似777这样的值,必须用S_IRUSR这种系统定义的常量。
                            cout << errno << endl;
                    }
     }
     else
     {
         cout << "Failed to create  folder myfolder in current directory." << endl; 
     }
}  

另外可以通过stat获取状态后判断一个对象是否为目录或是文件

 if(S_ISDIR(buf.st_mode))  //check whether its directory
 {
      ptr = "directory";
 }

S_ISDIR 只是一个 macro 而已,buf.st_mode 和特定的mask 进行 & 运算,判断结果是否为特定的值。 

c++并不提供这种对目录的操作,但是linux的API是支持的。通过 man 2 mkdir即可查看API的详细说明。

man帮助分为好几章,第一章为command,默认man查询时为man 1,即查询命令;

第二章为system calls,即系统调用,即我们通常所说的系统的API;

第三章为library functions,即c语言等的库函数。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwjwyj.html