一直打不起精神,直到前几个月开始时间emacs 和 vim,两款在神左右相伴的编辑器,很强大,很舒服,相见恨晚。
程序是小程序,是《Understanding Unix/Linux Programming - A Guide to Theory and Practice》这本书中4.15的习题。题目是这样的:
Unix 命令 mkdir 接受选项 -p。编写一种支持这个选项的 mkdir 命令版本
题目不是很难,查看 man mkdir 可知如下:
-p, --parents
no error if existing, make parent directories as needed
好,根据功能描述开始实现吧~代码如下:
/*
* =====================================================================================
*
* Filename: mkdir.c
*
* Description: mkdir
*
* Version: 1.0
* Created: 2012年09月02日 16时11分17秒
* Revision: none
* Compiler: gcc
*
* Author: Guotf(), tfguo369@gmail.com
* Organization:
*
* =====================================================================================
*/
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include "debug.h"
#include "error.h"
#define DIR_MODE 0777
#define ARRAY_LENGTH 1000
int checkPath(char *, char *);
int is_dir_exist(char *);
void deal_dir(char *);
/*
checkPath 这个函数写的不好,循坏的控制很差,希望大牛指正批评。
*/
int checkPath(char *path, char *spath){
memset(path, 0, ARRAY_LENGTH);
int i = 0;
char c;
char *originp = spath;
#ifdef DEBUG
printf("av[1] is %s\n", spath);
#endif
while(c)
{
#ifdef DEBUG
printf("c is %c , ", c);
printf("i is %d\n", i);
#endif
#ifdef DEBUG
printf("*spath is %c.(out)\n", *spath);
#endif
while((c = *spath++) != '/' && c != '\0'){
i++;
}
if(i == 0){
if(!is_dir_exist("/")){
deal_dir("/");
}
}
else{
memcpy(path, originp, i);
#ifdef DEBUG
printf("debug %s\n", path);
#endif
deal_dir(path);
}
i++;
}
}
int is_dir_exist(char *name){
DIR *d = opendir(name);
return d == NULL ? 0 : 1;
}
void deal_dir(char *name){
#ifdef DEBUG
printf("debug %s\n", name);
#endif
if(!is_dir_exist(name)){
if(mkdir(name, DIR_MODE) == -1){
perror("Error");
exit(1);
}
}
}
int main(int ac, char *av[]){
char path[ARRAY_LENGTH];
if(ac != 2){
error(stderr, "dir is invalid.");
}
else{
checkPath(path, av[1]);
}
}
目前测试没有bug,但以我的性格,虽然经过测试,但此程序难免会漏洞百出滴!
好了,给自己打打气,明天继续埋头~
分享到:
相关推荐
总的来说,通过`<direct.h>`库中的`_mkdir`函数,开发者可以在VC6.0下实现类似Linux`mkdir`的功能,创建新的文件夹或目录。对于更复杂的文件系统操作,如权限控制和跨平台兼容性,可能需要考虑使用其他库,如Boost....
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习...mkdir -p build make ./main make clean ```
根据提供的信息,我们可以详细探讨 Linux 下 C 语言编程中关于文件操作的相关知识点。这包括文件的创建、读写、属性管理...通过对这些函数的理解和运用,可以有效地管理和控制文件资源,从而实现更复杂的应用程序功能。
libIEC61850则是一个开源的、基于C语言实现的库,它为开发者提供了一种方便的方式来实现IEC61850协议,从而在各种设备和系统之间进行数据交换。 一、IEC61850标准概述 1. 标准背景:随着电力系统的发展,变电站的...
基于Qt的演示项目,以演示如何使用和实现基本的3D图形功能。 没有优化。 仅用于教育目的。 目的 学生提交是此存储库的主要目标。 不要在生产中使用此代码!!! 要求 git ; 与C ++ 17兼容的编译器; CMake 3.10+ ;...
mkdir -p /usr/local/snort/rules //建立规则文件夹 cp /usr/src/rules/* /usr/local/snort/rules/ vim /usr/local/snort/rules/web-misc.rules //取消暂不支持的检测规则 mkdir -p /var/log/snort //建立日志...
- 创建必要的目录:`mkdir -p /home/tools/pureftpd/etc` 和 `mkdir -p /home/tools/pureftpd/var/log/`。 - 复制配置文件到指定位置:使用`cp pure-config.pl /home/tools/pureftpd/etc/` 和 `cp pure-ftpd.conf ...
控制台组件预览安装用法构建目标动机贡献预览安装:创建项目:用法:安装最简单的安装方法是使用vscode扩展名:Marketplace存储库另外,也可以通过一些手动步骤来实现:首先,让我们下载CPM脚本mkdir -p cmake && ...
第二阶段是C语言实现的功能。 - **3. u-boot的移植过程** - 介绍了移植环境的搭建,包括Makefile的修改、配置文件的创建等。 - 描述了具体的移植步骤,包括配置交叉编译工具等。 通过以上详细介绍,开发者可以...
如果需要创建多层嵌套目录,可以使用`mkdir -p`,如`mkdir -p aa/bb/cc`。 文件管理方面,`ls`命令用来列出目录内容,`ls -a`显示所有文件包括隐藏文件,`ls -l`则提供详细信息,包括文件类型、权限、大小、时间和...
【资源说明】 基于NMPC的无人艇定点控制与轨迹跟踪控制仿真C++源码+...3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
- **说明**:`mkdir`用于创建单个目录,而`mkdir -p`则可以创建多级目录结构,即使其中某些目录层级已经存在也不会报错。 #### 3. `pwd` 命令 - **功能**:用于显示当前工作目录的完整路径。 - **用法**: ```bash...
sudo mkdir -p ${JENKINS_HOME}/workspace/NEW_TEST/__logs sudo touch /var/deploy/NEW_TEST/phing/build.xml sudo touch /var/deploy/NEW_TEST/phpdox/gen.xml ``` 通过以上步骤,我们可以成功搭建基于 Jenkins ...
例如,`mkdir -p /tmp/a/b/c`会在`/tmp`目录下创建`a/b/c`的完整路径。 5. `rmdir`命令用于删除空目录。`-p`选项同时删除所有空的父目录,`-s`选项在遇到非空目录时静默失败。例如,`rmdir -p /tmp/a/b/c`如果`/tmp...
用户可以通过键盘上的上下键来控制文件内容的滚动,也可以使用其他命令来实现更多的功能。 - **选项详解**: - `-c`: 清屏后重新显示文件内容。 - `-d`: 显示错误信息。 - `-f`: 强制使用全屏模式。 - `-l`: ...
它的功能强大且灵活,能够帮助用户轻松地备份数据、创建副本或者在不同的目录之间移动文件。下面我们将深入探讨`cp`命令的实现原理、选项以及实际应用。 `cp`命令的基本语法是: ```bash cp [选项] 源 目标 ``` ...
在Windows环境下,我们可以使用批处理文件和Windows的任务计划程序来实现类似的功能。以下是一个Windows批处理文件的例子: ```batch @echo off set BACKUP_DIR=C:\path\to\your\backup\directory set MYSQL_USER=...
- `mkdir`:用于创建目录,`mkdir -p`可以在路径不存在时创建多级目录。 - `cp`:用于复制文件或目录,使用`-r`选项可以递归复制目录。 - `mv`:用于移动文件或目录,也可以用来重命名文件。 - `rm`:用于删除...
操作系统课程设计新项目-基于C语言实现的文件系统源码+详细说明文档(含图形界面).zip 【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,...