一、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;
}
運行結果