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++相关推荐

  1. android file mkdir,android file.mkdir()一直返回false问题

    今天想写本地日志,结果写文件的时候一直失败,报FileNotFound错误,很明显,就是文件创建失败的问题了,debug了一下,发现在创建路径的时候,file.mkdirs()就出问题了(这个方法相对 ...

  2. matlab中的mkdir函数_科学网—Matlab中计算函数运行时间的三种方法及判断新建文件夹 - 张伟的博文...

    (一)运行时间 1.tic和toc组合 计算daotic和toc之间那专段程序之间的属运行时间,它的经典格式为 : tic 函数 toc 复制函数代码,当代码遇到tic时Matlab自动开始计时,运行 ...

  3. 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 ...

  4. cd: mkdir: rmdir: rm

    1.1 绝对路径和相对路径 绝对路径:是指在目录下的绝对位置,直接到的目标位置 例如:只要看到这个路径:D:\图片\徐慧茹.jpg"文件是在D盘的"图片"目录中.类似这样 ...

  5. mkdir、rmdir命令、head、tail命令

    mkdir -p 递归创建目录 11里面都是空目录 rmdir 删除空目录 -p 当子目录被删除后使它也成为空目录的话,则一并删除 步骤:先删除11/22/33 发现22目录空了,因为33删了,于是再 ...

  6. php中mkdir()函数的权限问题

    为什么80%的码农都做不了架构师?>>>    遇到个问题  某个定时job用root用户mkdir('./test/',0777)新建了目录,指定了权限是0777,结果获得的是07 ...

  7. Linux之mkdir和rm命令选项

    Linux之mkdir和rm命令选项 1. mkdir命令选项 命令选项 说明 -p 创建所依赖的文件夹 mkdir命令选项效果图: 2. rm命令选项 命令选项 说明 -i 交互式提示 -r 递归删 ...

  8. 6次课(相对和绝对路径、cd命令、创建和删除目录mkdir/rmdir、rm命令)

    2.6 相对和绝对路径 绝对路径: 路径写法一定是由跟目录"/"写起的.不管在那个路径下都能通过绝对路径找到文件从根开始例如 #ls /etc/sysconfig/network- ...

  9. 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 ...

  10. os.makedirs和os.mkdir 生成文件夹

    os.makedirs('./2') 将生成名为2的文件夹 使用 os.mkdir 時,如果你給定的 path 參數是個多層的 path,如果某個中繼的目錄不存在(比如說上例中的 foo), Pyth ...

最新文章

  1. LeetCode简单题之按奇偶排序数组 II
  2. java和jdbc对应关系,JDBC类型与JAVA类型对应关系
  3. 【Ubuntn】Ubuntu随笔
  4. eclipse maven打包_Maven中的几个重要概念:lifecycle, phase 和 goal
  5. (函数/类模板)的(偏特化/全特化)
  6. 使用Tkinter的Label组件写一个广告板招租
  7. Java多线程之死锁编码及定位分析
  8. 某同学正为自己安装不上sqlserver数据库而愁眉苦脸,使用朋友给的方法顿时喜笑颜开,那么朋友到底出了个什么样的方法呢?...
  9. python二维码生成器制作中报错为oserror_Python生成:OSError:[WinError 193]%1不是有效的Win32应用程序...
  10. SMS短信通API下行接口参数
  11. 微信 小程序 python 渲染_两小时快速构建微信小程序
  12. 动易CMS2006安装与配置
  13. 统计学(贾俊平《第七版》) 导论部分
  14. [原创] 我了解北京地区消费贷利息情况
  15. MogaFX-M1日
  16. minus的用法简介
  17. 【绝对好玩】我编过最好的游戏 o( ̄▽ ̄)d
  18. JAVA中List转数组和数组转List
  19. 猿创征文|【国产数据库实战】一文学会应用SqlSugar访问及操作人大金仓数据库
  20. android manifest相关属性

热门文章

  1. nginx配置以及rewrite规则
  2. android4.1 l36h,1080P四核旗舰手机 索尼L36h抢先评测
  3. Python之多进程和多线程详解
  4. 使用PhotoShop编辑图像元数据
  5. 【深度学习——梯度下降】区分BGD,SGD,MBGD
  6. 杭州内推 | 之江实验室招聘多模态算法实习生
  7. 表情包 | 新版首发,不来看看吗?
  8. php ajax parsererror,ajax中的 textStatus 报错为 parsererror。
  9. 惠普自动化测试软件官网,惠普最新测试管理工具 HP ALM 11.0 详细介绍
  10. 【青橙商城-管理后台开发】3. web模块搭建