linux下mkdir头文件_Linux中判断一个目录是否存在,如果不存在就创建这个目录

这篇博客介绍了在Linux环境下如何判断文件或目录是否存在,包括使用access()和stat()函数,以及如何创建目录通过mkdir()函数。同时提供了一个示例函数OpendirAndMkdir(),用于检查目录存在并创建,权限设置为0755。
摘要由CSDN通过智能技术生成

在操作文件目录时我们常常会考虑如下的功能:

1、判断文件是否存在,并判断文件是否可写/目录是否存在

Linux下:

#include

int access(const char* pathname, int mode);

参数介绍:

返回值:成功0,失败-1

pathname 是文件的路径名+文件名

mode:指定access的作用,取值如下:

F_OK 值为0,判断文件是否存在

X_OK 值为1,判断对文件是可执行权限

W_OK 值为2,判断对文件是否有写权限

R_OK 值为4,判断对文件是否有读权限

注:后三种可以使用或“|”的方式,一起使用,如W_OK|R_OK

C++(标准C++中):

头文件:

函数原型:int _access(const char *pathname, int mode);

参数:pathname 为文件路径或目录路径 mode 为访问权限(在不同系统中可能用不能的宏定义重新定义)

返回值:如果文件具有指定的访问权限,则函数返回0;如果文件不存在或者不能访问指定的权限,则返回-1.

备注:当pathname为文件时,_access函数判断文件是否存在,并判断文件是否可以用mode值指定的模式进行访问。当pathname为目录时,_access只判断指定目录是否存在,在Windows NT和Windows 2000中,所有的目录都只有读写权限。

mode的值和含义如下所示:

00——只检查文件是否存在

02——写权限

04——读权限

06——读写权限

注意:用   int   access(const   char   *pathname,   int   mode);   判断有没有此文件或目录 --它区别不出这是文件还是目录

用   int   stat(const   char   *file_name,   struct   stat   *buf); 判断该文件或目录是否否存在 ;得到st_mode,然后判断是不是目录文件。

stat()系统调用看是否成功,不成功就不存在,成功判断返回的st_mode是否是一个文件夹。

2、判断目录是否存在

可以使用opendir来判断,这是比较简单的办法。

#include

#include

DIR *opendir(const char *name);

3、Linux下mkdir函数,创建目录

头文件库:

#include

#include

函数原型:

int mkdir(const char *pathname, mode_t mode);

函数说明:

mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。

返回值:

若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。

mode的值如下表:

S_IRWXU00700权限,代表该文件所有者拥有读,写和执行操作的权限

S_IRUSR(S_IREAD)00400权限,代表该文件所有者拥有可读的权限

S_IWUSR(S_IWRITE)00200权限,代表该文件所有者拥有可写的权限

S_IXUSR(S_IEXEC)00100权限,代表该文件所有者拥有执行的权限

S_IRWXG00070权限,代表该文件用户组拥有读,写和执行操作的权限

S_IRGRP00040权限,代表该文件用户组拥有可读的权限

S_IWGRP00020权限,代表该文件用户组拥有可写的权限

S_IXGRP00010权限,代表该文件用户组拥有执行的权限

S_IRWXO00007权限,代表其他用户拥有读,写和执行操作的权限

S_IROTH00004权限,代表其他用户拥有可读的权限

S_IWOTH00002权限,代表其他用户拥有可写的权限

S_IXOTH00001权限,代表其他用户拥有执行的权限

int32_t OpendirAndMkdir(const char * pathname)

{

int ret = 0;

DIR * mydir = NULL;

if ((mydir = opendir(pathname)) == NULL)

{

ret = mkdir(pathname, 0755);

if (ret != 0) return -1;

printf("%s created sucess!/n", pathname);

}

else

{

printf("%s exist!/n", pathname);

}

return ret;

}

本文地址:https://blog.csdn.net/Swallow_he/article/details/109639047

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值