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

【文章摘要

       本文以实际的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,欢迎关注!)

时间: 2024-11-03 07:00:45

Linux下的目录创建命令使用实践的相关文章

利用uniread 解决 Linux下的SQL*Plus 命令行历史回调功能

解决|命令行 利用uniread 解决 Linux下的SQL*Plus 命令行历史回调功能 作者: Fenng 大家知道, 在 Windows 平台 命令行中的 SQL*Plus 有命令行历史回调的功能,在SQL*Plus工具下面,可以利用键盘的"向上向下"箭头键对命令行的进行回调.而在Linux上则没有该功能(虽然 Shell 可以做到这一点,但是 SQL*Plus 不可以). 而该功能对于CLI爱好者来说几乎是不可缺的,不知道为什么 Oracle 不把这个功能加进来.不得而知了.

Linux下vi替换字符命令操作实例

http://blog.csdn.net/zhouzhaoxiong1227/article/details/28657665 在Linux下的开发中,经常涉及到对文件中的字符进行处理,其中,对字符的替换操作也是非常的频繁.         本文以一个实际的文件为例,详细介绍了Linux下常用的vi替换字符命令,为相关的开发工作提供给了参考.           本文中被操作的文件为TestFile.txt,其中的内容如下:         zhou@linux:~/zhouzx/Test> c

Linux下vi编辑器的命令模式和编辑模式有什么区别?

问题描述 Linux下vi编辑器的命令模式和编辑模式有什么区别? 解决方案 编辑模式下可以输入和删除文本,与 windows 的常规编辑器的行为一样.命令模式下,可以方便地进行文本操作(包括批量的文本操作).比如说,删除命令d.dw 可以删除从当前光标开始的一个单词, dd 可以删除当前光标所在的行.解决方案二:基础问题还是先去学习学习

Linux下建立软链接ln命令使用方法

Linux下的软链接类似于windows下的快捷方式 ln -s a b 中的 a 就是源文件,b是链接文件名,其作用是当进入b目录,实际上是链接进入了a目录 如上面的示例,当我们执行命令   cd /gamestat/的时候  实际上是进入了 /home/gamestat/ 值得注意的是执行命令的时候,应该是a目录已经建立,目录b没有建立.我最开始操作的是也把b目录给建立了,结果就不对了.  删除软链接: rm -rf  b  注意不是 rm -rf  b/  建立硬链接 ln  a b 实例

Linux下常用的shell命令记录

本文章记录我在linux系统下常用或有用的系统级命令,包括软硬件查看.修改命令,有CPU.内存.硬盘.网络.系统管理等命令.但本文不打算介绍生僻命令,也不介绍各个linux发行版下的特有命令,且以后会持续更新. 说明,我是在一个Centos 6.4 64位的虚拟机系统进行测试.本文介绍的命令都会在此Centos下运行验证(也有部分命令会在我的suse/ubuntu系统里测试的,会做特明说明),但运行结果就不再列出了. 硬件篇 CPU相关 lscpu                   #查看的是

Linux下的压缩解压缩命令详解

linux zip命令 zip -r myfile.zip ./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzipunzip -o -d /home/sunny myfile.zip把myfile.zip文件解压到 /home/sunny/-o:不提示的情况下覆盖文件:-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下: 3.其他zip -d myfile.zip smart.txt删除压缩文件中

Linux下桌面快捷方式创建实例

  今天到网上搜ubuntu创建桌面快捷方式,发现尽是些不负责任,有问题的教程,故我也发教程一篇 在你的Home/Desktop文件夹下面新建一个xxx.desktop的文件,并且加上执行权限 复制代码 代码如下: chmod +x xxx.desktop 具体内容参照下面的模板,顺便讲一下linux下软件的安装方法,以sublime text 2为例 下载sublime linux的安装包,在你的home目录新建一个目录名,可以叫app,或者myapps啥的,你自己明白就行,就是软件的安装目录

Linux下查看并下载命令源码包(根据命令/应用程序逆向获取并且安装其所属源码包)

使用linux的过程中,我们会熟悉各种命令,偶尔我们不禁会问,这些命令是怎么实现的,学习他们其实是学习linux高级系统编程很快捷的方法. 这些命令的源码肯定是存放在相应的包里面,但是是哪些包呢? 发行版的包管理器为我们提供了很方便的命令接口,供我们查找我们指定命令所在的包 比如我们以最普通的uname命令来说明, 使用我们使用whereis或者which命令可以查找命令的绝对位置 通过rpm或者dpkg命令搜索命令所属的包信息 下载并安装对应的源码source包,即可得到源码 CentOS等r

linux下fallocate快速创建大文件

以前创建文件我一般用dd来创建,例如创建一个512M的文件: dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源) 但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢 在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘 则可以 dd if=/dev/zer