Linux下的目录创建命令使用实践

简介: 【文章摘要】       本文以实际的C源程序为例子,介绍了Linux下的目录创建命令(mkdir)的使用方法,为相关开发工作的开展提供了有益的参考。

【文章摘要

       本文以实际的C源程序为例子,介绍了Linux下的目录创建命令(mkdir)的使用方法,为相关开发工作的开展提供了有益的参考。

【关键词

       C语言  Linux  目录创建  makefile  开发

 

一、mkdir命令简介

        mkdir命令用来创建指定名称的目录,其命令格式为:mkdir [选项] 目录...

       其中,[选项]可以是“-m”、“-p”或“-v”。此外,目录名是区分大小写的。

 

二、本程序流程

        本文中的程序用于实现创建目录的功能。在创建目录之前,先检查要创建的目录是否存在,若存在,则直接退出。

        程序流程如图1所示。


图1 程序流程图

 

三、C程序源代码

        本文中的源程序命名为“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};

      

    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

 

四、程序执行结果

       将本工程文件传到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”命令,执行结果如下:

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

/zhouzx/TestDir already exists!

 

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

 

五、总结

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

 

 

 

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

目录
相关文章
|
8月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
966 1
二、Linux文本处理与文件操作核心命令
|
7月前
|
存储 Linux
Linux 目录名称
Linux系统目录结构简介:根目录(/)下包含各类功能目录,如/bin存放用户命令,/etc存储配置文件,/home为用户主目录,/var记录日志等可变数据,/usr存放用户工具,/tmp用于临时文件。各目录分工明确,保障系统有序运行。(238字)
329 5
|
8月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
551 137
|
8月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1470 58
|
7月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
1334 2
|
8月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
720 16
|
8月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
817 0
Linux内存问题排查命令详解
|
9月前
|
Linux 网络安全 开发工具
技术栈:这50条最常用的 Linux 命令你一定要会!
建议多在终端中实践,遇到不懂的命令就用 man 或 --help 了解详情!
1715 0
|
9月前
|
安全 Linux Shell
Linux系统中sudo命令的高效运用技巧。
用户可以通过sudo -l来列出自己目前可执行的命令列表,这有助于用户了解自己的权限范围。
357 0
|
9月前
|
监控 Linux Shell
linux命令
常用 Linux 命令汇总