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!\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

四、程序运行结果

将本project文件传到Linux机器上。

       1. makefile文件运行过程

在makefile文件所在文件夹下(“DirOper”project之下)输入“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。欢迎关注!)

时间: 2024-08-02 02:45:10

Linux下的文件夹创建命令使用实践的相关文章

Linux下各个文件夹的作用

linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序 /tmp 公用的临时文件存储点 /root 系统管理员的主目录(呵呵,特权

linux下各文件夹的结构说明及用途介绍

linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令.   /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示.   /lib:标准程序设计库,又 叫动态链接共享库,作用类似windows里的.dll文件.   /sbin:系统管理命令,这 里存放的是系统管理员使用的管理程序. /tmp:公用的临时文件存储 点. /root:

【转】linux下各文件夹的结构说明及用途介绍

linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示. /lib:标准程序设计库,又 叫动态链接共享库,作用类似windows里的.dll文件. /sbin:系统管理命令,这 里存放的是系统管理员使用的管理程序. /tmp:公用的临时文件存储 点. /root:系统管理员的

纯干货!Linux 下各文件夹的结构说明及用途介绍

linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示. /lib:标准程序设计库,又 叫动态链接共享库,作用类似windows里的.dll文件. /sbin:系统管理命令,这 里存放的是系统管理员使用的管理程序. /tmp:公用的临时文件存储 点. /root:系统管理员的

linux下遍历文件夹---opendir等用法

首先要说肯定是头文件,#include <sys/types.h>   #include <dirent.h> linux下遍历文件夹需要用到以下几个函数,其中有三个是必须的,其它几个是可选的. DIR* opendir(const char * name);   失败返回NULL.成功返回DIR结构体.注意DIR前面没有struct,如果加上编译器会warning struct dirent *readdir(struct DIR* dir);   失败返回NULL. void

linux下设置文件夹打开方式

你是否为在linux下打开文件夹每次都新打开一个窗口而感到烦恼,想像windows平台一样打开文件夹都覆盖父窗口打开. 设置方法如下: 打开system-preferences-File Management,如下图: 2.选择behavior,勾选Always open in browser windows,重新打开文件夹就是windows下的打开方式了.如图:

linux下删除文件夹的软链接时注意千万不能在后面加反斜杠,千万不要用强制删除,否则下面2种场景,你会把源文件删除,要闯祸的

今天遇到一个坑,自己在子目录下创建了父目录的软链接,导致可以无限循环进入父目录 [[email protected] dir1]$ ll total 8 -rw-rw-r-- 1 clouder clouder 4 Oct 9 17:49 a.txt -rw-rw-r-- 1 clouder clouder 4 Oct 9 17:49 b.txt lrwxrwxrwx 1 clouder clouder 10 Oct 9 17:49 dir1 -> /tmp/dir1/ [[email prot

linux 下各文件夹的功能性介绍。(转载)

原文来自:http://www.cnblogs.com/wen858636827/archive/2012/12/26/2834373.html /opt   放置用户自己下载的软件  英文全称是optional 美 [ ?ɑ:p??nl ] 随意的 adj. 可选择的; 随意的,任意的; 非强制的; 选修科目 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/h

linux 下个文件夹的用途和功能

/boot            :linux的启动文件和内核,例如LILO或者GRUB文件 /initrd (boot loader initialized RAM disk) : 由boot loader初始化的内存盘,在linux内核启动前,boot loader会将银盘中的initrd文件加载到内存,内核启动时会在访问真正根文件系统前先访问该内存的initrd文件系统 /bin (binary) : 标准命令和应用程序 /opt            :第三方软件在安装时默认会安装到这个