linux API 判断目录是否存在

本文介绍如何在C++中通过系统API完成目录创建及权限设置,包括检查目录是否存在、创建目录、设置目录权限,并通过stat函数判断对象类型。详细解释了使用mkdir、stat、chmod等Linux API的方法,以及它们在目录操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值