【文章摘要】
本文以实际的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 ...
随机推荐
-
用户反馈:对 Rafy 开发框架的一些个人建议
这篇文章是去年 Rafy 框架发布后,许胜平先生为我提出的一些建议.他从用户群体分析.社区.商业模式.技术支持等方面对框架发展提出了建议,我觉得写得非常不错.此文不仅适用于 Rafy 框架,所以不 ...
-
linux 鼠标中键粘帖功能?!!
转载自:http://yjhexy.iteye.com/blog/785564 ubuntu鼠标中键问题,其实也不是什么问题,ubuntu的鼠标中键是用来快速粘贴的,只是windows用惯了,时不时手 ...
-
什么是bower
Bower是一个客户端技术的软件包管理器,它可用于搜索.安装和卸载如JavaScript.HTML.CSS之类的网络资源.其他一些建立在Bower基础之上的开发工具,如YeoMan和Grunt,这个会 ...
-
Skyline中使用AxTE3DWindowEx打开新的一个球体
在winform窗体中拖入AxTE3DWindowEx控件. using system; using system.Collections.Generic; using System.Drawing; ...
-
hexo常用命令笔记
hexo npm install -g hexo npm update -g hexo hexo init 常用 hexo n == hexo new "a new post" 新 ...
-
PDF修改器
亲测可用的绿色版PDF修改器供大家分享使用 下载地址:http://pan.baidu.com/s/1pLPnhQb
-
读书笔记-浅析Java运行时数据区
作为一个 Java 为主语言的程序员,我偶尔也需要 用 C/C++ 写程序,在使用时让我很烦恼的一件事情就是需要对 new 出来的对象进行 delete/free 操作,我老是担心忘了这件事情,从而导 ...
-
配置ssh无密钥登陆
ssh 无密码登录要使用公钥与私钥. linux下可以用用ssh-keygen生成公钥/私钥对,下面以CentOS为例. 有机器LxfN1(192.168.136.128),LxfN2(192.168 ...
-
LCD 常用的客观效果指标和测试方法
1.DPI--精密度: 评分标准 DPI 评分 DPI<200 50 200≤DPI<250 60 250≤DPI<300 70 300≤DPI<350 80 350≤DPI& ...
-
aws上ecs上tomcat8080端口打开但是无法访问
参考: https://yq.aliyun.com/articles/92050?t=t1 1. 安全组设置 2. 防火墙规则 3. 查看 8080 端口是否绑定到 127.0.0.1上的.如果是 ...