天天看點

Linux下的目錄建立指令使用實踐一、mkdir指令簡介二、本程式流程三、C程式源代碼四、程式執行結果五、總結

【文章摘要】

       本文以實際的C源程式為例子,介紹了Linux下的目錄建立指令(mkdir)的使用方法,為相關開發工作的開展提供了有益的參考。

【關鍵詞】

       C語言  Linux  目錄建立  makefile  開發

        mkdir指令用來建立指定名稱的目錄,其指令格式為:mkdir [選項] 目錄...

       其中,[選項]可以是“-m”、“-p”或“-v”。此外,目錄名是區分大小寫的。

        本文中的程式用于實作建立目錄的功能。在建立目錄之前,先檢查要建立的目錄是否存在,若存在,則直接退出。

        程式流程如圖1所示。

Linux下的目錄建立指令使用實踐一、mkdir指令簡介二、本程式流程三、C程式源代碼四、程式執行結果五、總結

圖1 程式流程圖

        本文中的源程式命名為“DirOper.c”,放置到“DirOper”工程之下,并用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};

       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')

        */

        if(!MyDirExists((UINT8*)szDirectory))

           MyDirCreate(szDirectory);

    return TRUE;

/****************************************************************

* 功能描述: 主函數                                           

* 輸入參數: 無                                                

* 輸出參數: 無                                               

* 傳回值: 0-執行成功 -1-執行失敗                           

* 其他說明: 無                                               

* 修改日期          版本号        修改人            修改内容

* --------------------------------------------------------------

* 20140714         V1.0      Zhou Zhaoxiong     建立

****************************************************************/

INT32 main(void)

    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;

         }

        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

       将本工程檔案傳到Linux機器上。

       1. makefile檔案運作過程

       在makefile檔案所在目錄下(“DirOper”工程之下)輸入“make”指令,執行結果如下:

zhou@linux:~/zhouzx/DirOper> make

gcc -c -g DirOper.c

gcc -g -o release/TestDir DirOper.o

rm *.o

        2. 程式執行結果

        轉到release目錄下,輸入“TestDir”指令,執行結果如下:

zhou@linux:~/zhouzx/DirOper/release> TestDir

Now, create directory /zhouzx/TestDir

Create directory /zhouzx/TestDir/ successfully!

        再次輸入“TestDir”指令,執行結果如下:

/zhouzx/TestDir already exists!

        可見,第一次運作的時候成功建立了目錄,而第二次運作的時候,由于目錄已經存在了,是以程式列印了消息之後便退出了。

       本文用一個實際的C程式為例來說明了目錄建立指令(mkdir)的使用方法。總的說來,該指令在Linux相關操作中使用得非常的廣泛,大家一定要學會其用法。

(本人微網誌:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,歡迎關注!)

繼續閱讀