Linux下的文件夾創建命令使用實踐
【文章摘要】
本文以實際的C源程序為樣例,介紹了Linux下的文件夾創建命令(mkdir)的用法。為相關開發工作的開展提供了故意的參考。
【關鍵詞】
C語言 Linux 文件夾創建 makefile 開發
一、mkdir命令簡單介紹
mkdir命令用來創建指定名稱的文件夾,其命令格式為:mkdir [選項] 文件夾...
當中,[選項]能夠是“-m”、“-p”或“-v”。
此外,文件夾名是區分大寫和小寫的。
二、本程序流程
本文中的程序用於實現創建文件夾的功能。在創建文件夾之前。先檢查要創建的文件夾是否存在,若存在,則直接退出。
程序流程如圖1所看到的。
圖1 程序流程圖
三、C程序源碼
本文中的源程序命名為“DirOper.c”。放置到“DirOper”project之下。並用makefile對源程序進行編譯。
1. “DirOper.c”文件代碼內容
/**********************************************************************
* 版權全部 (C)2014, Zhou Zhaoxiong。
*
* 文件名: DirOper.c
* 文件標識:無
* 內容摘要:用於進行文件夾的相關操作
* 其他說明:無
* 當前版本號:V1.0
*
* 完畢日期:20140711
*
* 改動記錄1:// 改動歷史記錄, 包含改動日期、版本號號、改動人及改動內容
* 改動日期:完畢日期:20140714
* 版本號: V1.0
* 修改人: Zhou Zhaoxiong
* 改動內容:創建
**********************************************************************/
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <ftw.h>
// 數據類型
typedef unsigned char UINT8;
typedef signed int INT32;
typedef UINT8 BOOL;
// 宏定義
#define _S_IFDIR S_IFDIR
#define TRUE (BOOL)1
#define FALSE (BOOL)0
// 函數聲明
BOOL MyDirExists(UINT8 *pszDirectory);
void MyDirCreate(UINT8*pszDirectory);
BOOL MyForceDirCreate(UINT8 *pszDirectory);
INT32 main(void);
/**********************************************************************
* 功能描寫敘述:推斷文件夾是否存在
* 輸入參數: Directory-文件夾名稱
* 輸出參數:無
* 返 回 值: 1 - 存在
0 - 不存在
* 其他說明:無
* 改動日期 版本號號 改動人 改動內容
* -----------------------------------------------------------------------------
* 20140714 V1.0 ZhouZhaoxiong 創建
* ------------------------------------------------------------------------------*/
BOOL MyDirExists(UINT8 *pszDirectory)
{
struct stat st;
BOOL bResult = FALSE;
UINT8 cSep = ‘/‘;
UINT8 szDirectory[256] = {0};
UINT8 *pBegin = NULL;
// 對輸入指針進行異常推斷
if (NULL == pszDirectory)
{
printf("MyDirExists: input parameter is NULL!\n");
return TRUE;
}
strncpy((char*)szDirectory, (char *)pszDirectory, sizeof(szDirectory) - 1);
if(szDirectory[strlen(szDirectory)-1] == cSep) // 雙文件夾符號
{
pBegin =strrchr(szDirectory, (int)cSep);
if (NULL != pBegin)
{
pBegin[0] = 0;
}
}
if (stat(szDirectory, &st) == 0) // 檢查文件夾是否存在
{
bResult =((st.st_mode & _S_IFDIR) == _S_IFDIR);
}
else
{
bResult = 0;
}
return bResult;
}
/**********************************************************************
* 功能描寫敘述:創建文件夾
* 輸入參數: pszDirectory-文件夾名稱
* 輸出參數:無
* 返回值: 1-創建成功 0-創建失敗
* 其他說明:無
* 改動日期 版本號號 改動人 改動內容
*------------------------------------------------------------------
* 20140714 V1.0 Zhou Zhaoxiong 創建
*------------------------------------------------------------------- */
void MyDirCreate(UINT8 *pszDirectory)
{
UINT8 szRunCmd[256] ={0};
// 推斷輸入參數是否為空
if (pszDirectory == NULL)
{
printf("MyDirCreate: input parameter isNULL!\n");
return;
}
sprintf(szRunCmd, "mkdir -p %s", pszDirectory);
system(szRunCmd);
return;
}
/**********************************************************************
* 功能描寫敘述:強制創建文件夾
* 輸入參數: Directory-文件夾名稱
* 輸出參數:無
* 返回值:無
* 其他說明:無
* 改動日期 版本號號 改動人 改動內容
*-----------------------------------------------------------------------
* 20140714 V1.0 ZhouZhaoxiong 創建
*------------------------------------------------------------------------------*/
BOOL MyForceDirCreate(UINT8 *pszDirectory)
{
UINT8 *pszStart = NULL;
UINT8 *pszEnd = NULL;
UINT8 szDirectory[256] = {0};
UINT8 cSep = ‘/‘;
UINT8 szTmp[2]={0};
if (NULL == pszDirectory)
{
printf("MyForceDirCreate: input parameter is NULL!\n");
return FALSE;
}
if(pszDirectory[strlen(pszDirectory)-1] != cSep) // 沒有文件夾結束
{
szTmp[0] = cSep;
szTmp[1] = 0;
strcat((char*)pszDirectory, szTmp);
//printf("MyForceDirCreate: Add sep.\n");
}
pszStart =(char*)pszDirectory + 1;
pszEnd = pszStart;
while (pszEnd)
{
if (!(pszEnd =strchr(pszStart,(int)‘/‘)))
{
break;
}
memset(szDirectory,0x00, sizeof(szDirectory));
strncpy(szDirectory,pszDirectory, pszEnd-pszDirectory);
pszStart = pszEnd +1;
/*
if (szDirectory[0] ==‘ \0‘)
{
break;
}
*/
if(!MyDirExists((UINT8*)szDirectory))
{
MyDirCreate(szDirectory);
}
}
return TRUE;
}
/****************************************************************
* 功能描寫敘述: 主函數
* 輸入參數: 無
* 輸出參數: 無
* 返回值: 0-運行成功 -1-運行失敗
* 其他說明: 無
* 改動日期 版本號號 改動人 改動內容
* --------------------------------------------------------------
* 20140714 V1.0 Zhou Zhaoxiong 創建
****************************************************************/
INT32 main(void)
{
UINT8 szDirectory[256] = {0};
memcpy(szDirectory,"/zhouzx/TestDir", strlen("/zhouzx/TestDir"));
// 先檢測文件夾是否存在, 假設不存在, 則創建文件夾
if(!MyDirExists(szDirectory))
{
printf("Now,create directory %s\n", szDirectory);
if(MyForceDirCreate(szDirectory))
{
printf("Create directory %ssuccessfully!\n", szDirectory);
}
else
{
printf("Create directory %sfailed!\n", szDirectory);
return -1;
}
}
else
{
printf("%salready exists!\n", szDirectory);
}
return 0;
}
2. makefile文件的內容
TestMakeFile :DirOper.c
gcc -c -g DirOper.c
gcc -g -o release/TestDir DirOper.o
rm *.o
四、程序運行結果
將本project文件傳到Linux機器上。
1. makefile文件運行過程
在makefile文件所在文件夾下(“DirOper”project之下)輸入“make”命令,運行結果例如以下:
[email protected]:~/zhouzx/DirOper> make
gcc -c -g DirOper.c
gcc -g -o release/TestDir DirOper.o
rm *.o
2. 程序運行結果
轉到release文件夾下,輸入“TestDir”命令,運行結果例如以下:
[email protected]:~/zhouzx/DirOper/release> TestDir
Now, create directory /zhouzx/TestDir
Create directory /zhouzx/TestDir/ successfully!
再次輸入“TestDir”命令,運行結果例如以下:
[email protected]:~/zhouzx/DirOper/release> TestDir
/zhouzx/TestDir already exists!
可見,第一次運行的時候成功創建了文件夾,而第二次運行的時候,因為文件夾已經存在了,因此程序打印了消息之後便退出了。
五、總結
本文用一個實際的C程序為例來說明了文件夾創建命令(mkdir)的用法。總的說來,該命令在Linux相關操作中使用得很的廣泛。大家一定要學會其用法。
(本人微博:http://weibo.com/zhouzxi?
topnav=1&wvr=5,微信號:245924426。歡迎關註!)
Linux下的文件夾創建命令使用實踐