连续奋战了三天,终于提交了一个小的项目通过了~也算明白了之前的一句话:老板要的是结果,不是过程。一句话,我明天要结果,我就得屁颠屁颠的赶出来。不光是写代码,还得用Qt做出界面来,UI设计本身就不是我这种粗人的擅长,真心纠结。好了,废话不多说了,返回主题。

记得bash下mkdir -p命令可以递归创建目录,但是近期使用系统调用mkdir函数时才发现无法递归创建目录,而且这个函数也只有两个参数,一个是path,另一个是mode,无法指定其他参数。于是乎只能自己编写mkdirs来创建多级目录。代码比较挫,大半夜写的,思路也不清晰,勉强能用。
~~~~
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

#define BUFLEN 255   

/**
 *@function mkdirs : create dir recursion  
 */  
 int mkdirs(const char *path,mode_t mode)   
 {   
        if(path==NULL)   
        {   
                #ifdef __DEBUG__   
                fprintf(stderr,"[%s:%d]path is NULL pointer!\n",   
                                                                    __FILE__,__LINE__);   
                #endif   
                return -1;   
        }   

        char DirName[BUFLEN];   
        strcpy(DirName,path);   
        int i,len;   
        if((len = strlen(DirName))==0 )   
        {   
                #ifdef __DEBUG__   
                fprintf(stderr,"[%s:%d]strlen(DirName) is 0\n",   
                                                         __FILE__,__LINE__);   
                #endif   
                return -1;   
        }   

        if(DirName[len-1]!='/')   
                strcat(DirName,"/");   

        len = strlen(DirName);   
        for(i=1;i<len;i++)   
        {   
                if(DirName[i] == '/')   
                {   
                        DirName[i] = 0;   
                        if(access(DirName,F_OK)!=0)   
                        {   
                                if(mkdir(DirName,mode) < 0)   
                                {   
                                        #ifdef __DEBUG__   
                            fprintf(stderr,"[%s:%d]mkdir %s error! : %s\n",   
                     __FILE__,__LINE__,DirName,strerror(errno));   
                                        #endif   
                                        return -1;   
                                }   
                        }   
                        DirName[i] = '/';   
                }   
        }   
        return 0;   
 }  

上面用的遍历字符串数组,当然也可以调用strchr函数返回目录’/’的指针来进行遍历,有点手懒就不重写了。

看了D大写的代码优化的问题,想了很多,下午老板也说了,抽时间把代码优化一下……好吧,优化代码的事情在我看来还是很美妙的一件事情。加油了……

Linux平台mkdir函数创建多级目录

发表评论

电子邮件地址不会被公开。 必填项已用*标注