mkdir实现c++
1.获取当前工作路径
char *getcwd(char *buf, size_t size):出错返回NULL
getcwd(NULL,0):malloc自动分配内存,内存空间需手动释放
get_current_dir_name():内存空间需手动释放
2.创建目录
mkdir(char*path,mode_t mode),其中path为文件绝对路径或相对路径。omode_t为定义的32位无符号整数
3.文件属性结构体stat,从inode中获取文件信息
struct stat { mode_t st_mode; 文件类型与访问权限 ino_t st_ino; i节点号 dev_t st_dev; 文件使用的设备号 dev_t st_rdev; 设备文件的设备号 nlink_t st_nlink; 文件的硬链接数 uid_t st_uid; 文件所有者用户ID gid_t st_gid; 文件所有者组ID off_t st_size; 文件大小(以字节为单位) time_t st_atime; 最后一次访问该文件的时间 time_t st_mtime; 最后一次修改该文件的时间 time_t st_ctime; 最后一次改变该文件状态的时间 blksize_t st_blksize; 包含该文件的磁盘块的大小 blkcnt_t st_blocks; 该文件所占的磁盘块 数
};
选项:
-p:级联创建目录
-m:指定目录权限
-v:显示创建过程信息
c++实现:
#include <stdio.h>
#include <sys/types.h> /*umask、stat*/
#include <sys/stat.h> /*chmod*/
#include <unistd.h>
#include <err.h>
#include <errno.h>
#include <libgen.h> /*dirname*/
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <iostream>using namespace std;void err_msg(){ if(errno==ENOTDIR)cout<<"not directory!"<<endl;else if(errno == ENOENT)cout<<"no such directory"<<endl; else if(errno == EEXIST)cout<<"directory exsit"<<endl;elsecout<<"errno: "<<errno<<endl;
}/*-p*/
void create_parent_directory(char*path,int vflag,mode_t omode){struct stat buf;int p_end=0;/*path check*/if((*path)=='/') p_end++;while(path[p_end]!='\0'){if(path[p_end]=='/'){path[p_end]='\0';if(lstat(path,&buf)==-1){ if(errno==ENOENT){if(mkdir(path,omode)==-1){err_msg();return;}if(vflag){ printf("mkdir: created directory'%s'\n",path);} path[p_end]='/';p_end++;break;}elseerr_msg(); }else{if(!S_ISDIR(buf.st_mode))err_msg(); } path[p_end]='/';}p_end++;}/*create parent directory*/while(path[p_end]!='\0'){if(path[p_end]=='/'){path[p_end]='\0'; if(mkdir(path,omode)==-1){ err_msg();}if(vflag){ printf("mkdir: created directory'%s'\n",path);}path[p_end]='/'; }p_end++;}if(path[p_end-1]!='/'){if(mkdir(path,omode)==-1){err_msg();return;}if(vflag){ printf("mkdir: created directory'%s'\n",path);} }
}int main(int argc,char** argv){int pflag=0,vflag=0,ch;const char*mode;mode_t omode=0;struct stat buf;if(optind==argc){cout<<"missing operand!"<<endl;exit(-1);}while((ch=getopt(argc,argv,"m:pv"))!=-1){switch(ch){case'm':mode=optarg;//break;case'p':pflag=1;break;case'v':vflag=1;break;default:cout<<"wrong option!"<<endl;exit(-1);}}/*file mode*/if(!mode){omode=S_IRWXU | S_IRWXG | S_IRWXO;}else{while((*mode)!='\0'){omode=omode+((*mode)-'0');mode++;}}argv+=optind;if(pflag){while(*argv){create_parent_directory(*argv,vflag,omode); argv++;} }else{while(*argv){if(mkdir(*argv,omode)==-1)err_msg(); if(vflag){ printf("mkdir: created directory'%s'\n",(*argv));} argv++;}}return 0;
}
mkdir实现c++相关推荐
- android file mkdir,android file.mkdir()一直返回false问题
今天想写本地日志,结果写文件的时候一直失败,报FileNotFound错误,很明显,就是文件创建失败的问题了,debug了一下,发现在创建路径的时候,file.mkdirs()就出问题了(这个方法相对 ...
- matlab中的mkdir函数_科学网—Matlab中计算函数运行时间的三种方法及判断新建文件夹 - 张伟的博文...
(一)运行时间 1.tic和toc组合 计算daotic和toc之间那专段程序之间的属运行时间,它的经典格式为 : tic 函数 toc 复制函数代码,当代码遇到tic时Matlab自动开始计时,运行 ...
- linux重命名tar命令,linux常用操作指令4 —— 文件操作相关命令(mkdir、touch、rm、mv、cp、cat 、 find 、tar、chmod)...
文件操作相关命令 文件操作相关命令 1.创建文件夹mkdir 2.创建文件touch 3.移动文件夹mv(类似于剪切) 4.删除rm 5.重命名mv 6.复制cp 7.查看文件(cat.head.ta ...
- cd: mkdir: rmdir: rm
1.1 绝对路径和相对路径 绝对路径:是指在目录下的绝对位置,直接到的目标位置 例如:只要看到这个路径:D:\图片\徐慧茹.jpg"文件是在D盘的"图片"目录中.类似这样 ...
- mkdir、rmdir命令、head、tail命令
mkdir -p 递归创建目录 11里面都是空目录 rmdir 删除空目录 -p 当子目录被删除后使它也成为空目录的话,则一并删除 步骤:先删除11/22/33 发现22目录空了,因为33删了,于是再 ...
- php中mkdir()函数的权限问题
为什么80%的码农都做不了架构师?>>> 遇到个问题 某个定时job用root用户mkdir('./test/',0777)新建了目录,指定了权限是0777,结果获得的是07 ...
- Linux之mkdir和rm命令选项
Linux之mkdir和rm命令选项 1. mkdir命令选项 命令选项 说明 -p 创建所依赖的文件夹 mkdir命令选项效果图: 2. rm命令选项 命令选项 说明 -i 交互式提示 -r 递归删 ...
- 6次课(相对和绝对路径、cd命令、创建和删除目录mkdir/rmdir、rm命令)
2.6 相对和绝对路径 绝对路径: 路径写法一定是由跟目录"/"写起的.不管在那个路径下都能通过绝对路径找到文件从根开始例如 #ls /etc/sysconfig/network- ...
- Linux系统介绍 文件夹和文件管理命令 10个(pwd ls cd mkdir touch mv rm cp tar ln)
ls -a ls -l ls -lh ls -l -h -S ls -lhS ls -lhS ls -lht ls ls -lls -lth ls .file* ls ./*txt ls -a ls ...
- os.makedirs和os.mkdir 生成文件夹
os.makedirs('./2') 将生成名为2的文件夹 使用 os.mkdir 時,如果你給定的 path 參數是個多層的 path,如果某個中繼的目錄不存在(比如說上例中的 foo), Pyth ...
最新文章
- LeetCode简单题之按奇偶排序数组 II
- java和jdbc对应关系,JDBC类型与JAVA类型对应关系
- 【Ubuntn】Ubuntu随笔
- eclipse maven打包_Maven中的几个重要概念:lifecycle, phase 和 goal
- (函数/类模板)的(偏特化/全特化)
- 使用Tkinter的Label组件写一个广告板招租
- Java多线程之死锁编码及定位分析
- 某同学正为自己安装不上sqlserver数据库而愁眉苦脸,使用朋友给的方法顿时喜笑颜开,那么朋友到底出了个什么样的方法呢?...
- python二维码生成器制作中报错为oserror_Python生成:OSError:[WinError 193]%1不是有效的Win32应用程序...
- SMS短信通API下行接口参数
- 微信 小程序 python 渲染_两小时快速构建微信小程序
- 动易CMS2006安装与配置
- 统计学(贾俊平《第七版》) 导论部分
- [原创] 我了解北京地区消费贷利息情况
- MogaFX-M1日
- minus的用法简介
- 【绝对好玩】我编过最好的游戏 o( ̄▽ ̄)d
- JAVA中List转数组和数组转List
- 猿创征文|【国产数据库实战】一文学会应用SqlSugar访问及操作人大金仓数据库
- android manifest相关属性
热门文章
- nginx配置以及rewrite规则
- android4.1 l36h,1080P四核旗舰手机 索尼L36h抢先评测
- Python之多进程和多线程详解
- 使用PhotoShop编辑图像元数据
- 【深度学习——梯度下降】区分BGD,SGD,MBGD
- 杭州内推 | 之江实验室招聘多模态算法实习生
- 表情包 | 新版首发,不来看看吗?
- php ajax parsererror,ajax中的 textStatus 报错为 parsererror。
- 惠普自动化测试软件官网,惠普最新测试管理工具 HP ALM 11.0 详细介绍
- 【青橙商城-管理后台开发】3. web模块搭建