zoukankan      html  css  js  c++  java
  • 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! ");

            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! ");

            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! ");

            return FALSE;

        }

       

        if(pszDirectory[strlen(pszDirectory)-1] != cSep)     // 没有文件夹结束

        {

            szTmp[0] = cSep;

            szTmp[1] = 0;

            strcat((char*)pszDirectory, szTmp);

            //printf("MyForceDirCreate: Add sep. ");

        }

          

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

            {

                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 ", szDirectory);

            if(MyForceDirCreate(szDirectory))

            {

                 printf("Create directory %ssuccessfully! ", szDirectory);

            }

             else

             {

                 printf("Create directory %sfailed! ", szDirectory);

                 return -1;

             }

        }

        else

        {

            printf("%salready exists! ", 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”命令,运行结果例如以下:

    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”命令,运行结果例如以下:

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

    /zhouzx/TestDir already exists!

     

            可见,第一次运行的时候成功创建了文件夹,而第二次运行的时候,因为文件夹已经存在了,因此程序打印了消息之后便退出了。

     

    五、总结

           本文用一个实际的C程序为例来说明了文件夹创建命令(mkdir)的用法。总的说来,该命令在Linux相关操作中使用得很的广泛。大家一定要学会其用法。

     

     

     

    (本人微博:http://weibo.com/zhouzxi?

    topnav=1&wvr=5,微信号:245924426。欢迎关注!)

  • 相关阅读:
    Linux内核分析第十八章读书笔记
    Linux内核分析作业 NO.5
    Linux内核分析第五章读书笔记
    Linux内核分析 一二章读书笔记
    Linux内核分析作业 NO.4
    Linux内核分析 NO.3
    Linux内核分析作业 NO.2
    Linux内核分析作业 NO.1
    论自我,论异类——《无声告白》
    愿随命运颠沛流离——《孤儿列车》读后感
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6848030.html
Copyright © 2011-2022 走看看