Linux下的文件夹创建命令使用实践
【文章摘要】
本文以实际的C源程序为样例,介绍了Linux下的文件夹创建命令(mkdir)的用法。为相关开发工作的开展提供了故意的參考。
【关键词】
C语言 Linux 文件夹创建 makefile 开发
一、mkdir命令简单介绍
mkdir命令用来创建指定名称的文件夹,其命令格式为:mkdir [选项] 文件夹...
当中,[选项]能够是“-m”、“-p”或“-v”。
此外,文件夹名是区分大写和小写的。
二、本程序流程
本文中的程序用于实现创建文件夹的功能。在创建文件夹之前。先检查要创建的文件夹是否存在,若存在,则直接退出。
程序流程如图1所看到的。
图1 程序流程图
三、C程序源码
本文中的源程序命名为“DirOper.c”。放置到“DirOper”project之下。并用makefile对源程序进行编译。
1. “DirOper.c”文件代码内容
* 版本号: 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”命令,运行结果例如以下:
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下删除文件夹的命令
使用rm -rf 目录名字 命令即可 -r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思 eg 删除文件夹实例:rm -rf /var/log/httpd/acc ...
- linux下各文件夹的结构说明及用途介绍
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /ho ...
- 【转】linux下各文件夹的结构说明及用途介绍
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录 ...
- Linux下各文件夹的结构说明及用途介绍(转载)
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录 ...
- linux下各文件夹的结构说明及用途介绍:Linux目录结构介绍
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录 ...
- 【转载】Linux下各文件夹的含义和用途
原文地址:https://www.cnblogs.com/lanqingzhou/p/8037269.html Linux下各文件夹的含义和用途 Linux根目录”/“下各个系统文件夹的含义和用途 1 ...
- linux下复制文件夹命令
在源文件的目录下,对其进行cp操作,到后面的目标路径,对其进行文件夹复制 cp -rf /home/wangshiming/Downloads/* /home/wangshiming/tools
- (转载)linux下各个文件夹的作用
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
- linux 下各文件夹的功能性介绍。(转载)
原文来自:http://www.cnblogs.com/wen858636827/archive/2012/12/26/2834373.html /opt 放置用户自己下载的软件 英文全称是op ...
随机推荐
- Android APK生成证书并签名方法
Android APK生成证书并签名方法 android cordova keystore android证书签名 阅读:925 时间:2018年09月20日 Android开发者可能对此很熟悉.使用 ...
- day23-1 isinstance、issubclass和反射
目录 isinstance和issubclass 反射(hasattr,getattr,setattr,delattr) isinstance和issubclass isinstance(obj,cl ...
- vim跳转(一)
参考资料:http://easwy.com/blog/archives/advanced-vim-skills-basic-move-method/ 在normal模式下使用如下命令 1.h, j, ...
- windows/linux 更新python pip
linux环境下 pip install -U pip windows环境下 python -m pip install -U pip python -m pip install --upgrade ...
- 查看密码存放地-shadow
shadow 位置:/cat/shadow 作用:存放用户的密码等信息 使用查看命令以后得到以下数据 我们会看到9个字段,分别用 :隔开,如上图所示一一解释: 第一字段:用户名称 第二字段:加密密码 ...
- jQuery的鼠标移入与移出事件
mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseou ...
- python3.x Day5 面向对象
类:类是指:对具有相同属性的事物的抽象.蓝图.原型.在类中定义了这些事物都具备的属性和共同的方法. 对象:一个对象就是一个类实例化以后的实例,一个类必须经过实例化后才能在程序中被使用,一个类可以实例化 ...
- 树莓派 - platform总线,设备和驱动
以树莓派为例子,分析一下其中LED的 platform device 和 platform driver. 查看LED设备,被挂载在/sys/devices/platform下. 注意其中的drive ...
- [安装] mac安装PHP7经历
背景 前几天在mac上跑workrman,由于workerman需要开启多个进程,多进程需要pcntl扩展的支持,我之前那个brew安装的php71没有这个扩展,就直接卸载了php71,然后想下载源码 ...
- eclipse perl配置
先下载jdk,如果jdk装的是32位,eclipse也要下载32位的,64位也是一样.我用的是jdk7 64位. 下载eclipse,去官网上下载最新的http://www.eclipse.org/d ...