一、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_IRWXU | 00700权限,代表该文件所有者拥有读,写和执行操作的权限 |
S_IRUSR(S_IREAD) | 00400权限,代表该文件所有者拥有可读的权限 |
S_IWUSR(S_IWRITE) | 00200权限,代表该文件所有者拥有可写的权限 |
S_IXUSR(S_IEXEC) | 00100权限,代表该文件所有者拥有执行的权限 |
S_IRWXG | 00070权限,代表该文件用户组拥有读,写和执行操作的权限 |
S_IRGRP | 00040权限,代表该文件用户组拥有可读的权限 |
S_IWGRP | 00020权限,代表该文件用户组拥有可写的权限 |
S_IXGRP | 00010权限,代表该文件用户组拥有执行的权限 |
S_IRWXO | 00007权限,代表其他用户拥有读,写和执行操作的权限 |
S_IROTH | 00004权限,代表其他用户拥有可读的权限 |
S_IWOTH | 00002权限,代表其他用户拥有可写的权限 |
S_IXOTH | 00001权限,代表其他用户拥有执行的权限 |
示例代码
#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;
}
运行结果