//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语言等的库函数。