C语言创建目录(文件夹)之mkdir

一、mkdir

说明:创建目录。
头文件库:

#include <sys/stat.h>
#include <sys/types.h>

函数原型:

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

mode方式:可多个权限相或,如0755表示S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH

权限说明
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权限,代表其他用户拥有执行的权限

示例代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>

int checkMkdir(char *sPath);

int main()
{
	char sPath[256 + 1];

	memset(sPath, 0x00, sizeof(sPath));

	sprintf(sPath, "%s/%s", getenv("HOME"), "test/test/");
	
	if( 0 != checkMkdir(sPath))
	{
		printf("创建文件失败\n");
	}
	else
	{
		printf("创建文件成功\n");
	}

	return 0;
}



/*
 * 函数名称 checkMkdir
 * 函数功能 创建文件
 * 函数描述 传入一个文件所在的绝对路径 创建文件
 * 入    参 sPath 文件绝对路径
 * 返    回 SUCCESS return 0
 *          FAIL    return 非0
*/
int checkMkdir(char *sPath)
{
	int iRet = 0;                         /* 函数返回值 */
	char sFilePath[256 + 1];              /* 创建文件路径 */
	char sPathTmp[256 + 1];               /* 临时文件路径 */
	char *pDir = NULL;

	struct stat stFileStat;


	memset(sFilePath, 0x00, sizeof(sFilePath));
	memset(sPathTmp, 0x00, sizeof(sPathTmp));
	memset(&stFileStat, 0x00, sizeof(stFileStat));

	memcpy(sFilePath, sPath, sizeof(sFilePath));

	
	pDir = strtok(sFilePath, "/");
	strcat(sPathTmp, "/");
	strcat(sPathTmp, pDir);
	strcat(sPathTmp, "/");

	memset(&stFileStat, 0x00, sizeof(stFileStat));
	stat(sPathTmp, &stFileStat);

	if( !S_ISDIR(stFileStat.st_mode) )
	{
		iRet = mkdir(sPathTmp, S_IWUSR|S_IRUSR|S_IXUSR);
		if( -1 == iRet )
		{
			printf("mkdir path [%s] error [%ld]\n", sPathTmp, iRet);
			return iRet;
		
		}	
	}

	while( NULL != ( pDir=strtok(NULL, "/") ) )
	{
		strcat(sPathTmp, pDir);
		strcat(sPathTmp, "/");

		memset(&stFileStat, 0x00, sizeof(stFileStat));
		stat(sPathTmp, &stFileStat);

		if( !S_ISDIR(stFileStat.st_mode) )
		{
			iRet = mkdir(sPathTmp, S_IWUSR|S_IRUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP);
			if( -1 == iRet )
			{
				printf("mkdir path [%s] error [%ld]\n", sPathTmp, iRet);
				return iRet;
		
			}
		}
	}

	return iRet;
}

运行结果
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值