一、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;
}
运行结果