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

[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下的目录创建命令使用实践,布布扣,bubuko.com

时间: 07-14

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

Linux下的目录扫描操作函数使用实践

[文章摘要] 本文以实际的C源程序为例子,介绍了Linux下的目录扫描函数(scandir)的使用方法,为相关开发工作的开展提供了有益的参考. [关键词] C语言  Linux  目录扫描  makefile  scandir 一.scandir命令简介 scandir函数的声明为: int scandir(const char *dir, structdirent ***namelist, int (*filter) (const void *b), int ( * compare )( co

Linux文件与目录管理命令总结

在Linux下对文件和目录的操作是学习linux的基础,文件的操作无非就是增删改查等等.对于目录的操作也是对目录的增删改查以及修改目录属性等操作.在了解目录管理前得先了解目录的结构.linux下的目录是树型结构,所有的目录都从根(/)开始,其他的文件系统以挂载的方式挂载到目录上去进行使用.访问目录时有相对路径和绝对路径之分. 相对路径:路径的写法不是由根写起的,而是在当前路径的基础之上的.例如:例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd .

在Linux下给mysql创建用户并分配权限等问题

在linux系统中安装mysql的步骤 工具: mysql-5.6.17-linux-glibc2.5-i686.tar.gz mysql-5.6.17-linux-glibc2.5-x86_64.tar.gz linux系统64位 方法/步骤 1.到mysql官网下载mysql编译好的二进制安装包. 2.解压安装包: 3.进入安装包所在目录,执行命令:tar -zxvf  mysql-5.6.17-linux-glibc2.5-i686.tar.gz 4.复制解压后的mysql目录到系统的本地

linux下为目录和文件设置权限,

linux下为目录和文件设置权限,包括子目录的循环递归设置 chmod  命令可以改变所有子目录的权限,下面有2种方法 改变一个文件的权限: chmod mode file|dir 改变所有子目录的权限: chmod mode dir -R                  注意后面加了个-R参数 参数就是权限模式 mode = 777 or 752 ,666,,, mode 的三个数字,分别表示owner,group,others所具有的权限. 1 = x 执行 2 = w 写 4 = r 读

Linux下的LVM创建以及Linux快照卷

通过最的学习,我加深了对LVM的理解,在这里,我将它写成博客,一是方便自己记忆,二是让Linux的入门学习者一起学习一下. 首先我们引入LVM的概念,并展开详细的说明,主要是近期学习的看法,我们先看一个图 我们将会提到的名词有:PV.VG.LV.PE 在图中,最下面的,我们可以理解为物理存储介质,硬盘或是分区 PV:称为物理卷,是LVM的基本存储块. VG:称为卷组,我们可以看卷组是由物理卷组合而成的. LV:称为逻辑卷,是从卷组中划分出来的. PE:physical extent,我就称为物理

二十七、Linux下常用的shell命令记录

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

20145239 Linux下常用的ls命令总结

20145239 Linux下常用的ls命令总结 通过学习本周的教学视频和要求掌握的内容,发现ls命令被使用的次数非常多,但作为一个初学者,可能我只会ls或者顶多ls -l两种用法.但其实ls是一个非常实用的指令,因此我想简单的总结一下ls的常用命令. ls,英文全名:list 即列表的意思. 常用命令(以本周的10io文件夹为例): 1. ls -a 列出文件下所有的文件,包括以"."开头的隐藏文件(linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录). 2. ls

linux下为目录和文件设置权限

chmod  命令可以改变所有子目录的权限,下面有2种方法 改变一个文件的权限: chmod mode file|dir 改变所有子目录的权限: chmod mode dir -R                  注意后面加了个-R参数 参数就是权限模式 mode = 777 or 752 ,666,,, mode 的三个数字,分别表示owner,group,others所具有的权限. 1 = x 执行 2 = w 写 4 = r 读,比如owner具有所有权限,1+2+4=7, 又比如gro

linux下安装mysql及命令学习

目录: 1. 安装mysql 2. mysql文件部署 3. mysql启停命令 4. 连接数据库 5. 操作数据库命令 6. 数据的导入导出 7. 其他 1.安装mysql 1.使用yun安装mysql,可自动安装完成 yun install mysql mysql-server #询问是否要安装,输入Y即可自动安装,知道安装完成 2.为mysql的root账户设置密码 mysql_secure_installation 回车,根据提示输入Y     输入2次密码,回车     根据提示一路输