如何在C ++Linux中创建目录树?

如何在C ++Linux中创建目录树?,第1张

如何在C ++ / Linux中创建目录树?

这是一个可以用C ++编译器编译的C函数。

#include "jlss.h"#include "emalloc.h"#include <errno.h>#ifdef HAVE_UNISTD_H#include <unistd.h>#endif #include <string.h>#include "sysstat.h"    typedef struct stat Stat;#ifndef lintconst char jlss_id_mkpath_c[] = "@(#)$Id: mkpath.c,v 1.13 2012/07/15 00:40:37 jleffler Exp $";#endif static int do_mkdir(const char *path, mode_t mode){    Stat st;    int  status = 0;    if (stat(path, &st) != 0)    {                if (mkdir(path, mode) != 0 && errno != EEXIST) status = -1;    }    else if (!S_ISDIR(st.st_mode))    {        errno = ENOTDIR;        status = -1;    }    return(status);}int mkpath(const char *path, mode_t mode){    char*pp;    char*sp;    int  status;    char*copypath = STRDUP(path);    status = 0;    pp = copypath;    while (status == 0 && (sp = strchr(pp, '/')) != 0)    {        if (sp != pp)        {  *sp = ''; status = do_mkdir(copypath, mode); *sp = '/';        }        pp = sp + 1;    }    if (status == 0)        status = do_mkdir(path, mode);    FREE(copypath);    return (status);}#ifdef TEST#include <stdio.h>int main(int argc, char **argv){    int  i;    for (i = 1; i < argc; i++)    {        for (int j = 0; j < 20; j++)        { if (fork() == 0) {     int rc = mkpath(argv[i], 0777);     if (rc != 0)         fprintf(stderr, "%d: failed to create (%d: %s): %sn",      (int)getpid(), errno, strerror(errno), argv[i]);     exit(rc == 0 ? EXIT_SUCCESS : EXIT_FAILURE); }        }        int status;        int fail = 0;        while (wait(&status) != -1)        { if (WEXITSTATUS(status) != 0)     fail = 1;        }        if (fail == 0) printf("created: %sn", argv[i]);    }    return(0);}#endif 

STRDUP()
FREE()
是对的错误检查版本,
strdup()
free()
在中声明
emalloc.h
(并在
emalloc.c
和中实现
estrdup.c
)。该
"sysstat.h"
标头处理的是旧版本,
<sys/stat.h>
可以
<sys/stat.h>
在现代Unix系统上替换(但是在1990年有很多问题)。并
"jlss.h"
声明
mkpath()

v1.12(上一个)和v1.13(以上)之间的变化是对

EEXIST
in
测试
do_mkdir()
。Switch指出了这一点-谢谢Switch。测试代码已经升级,并在MacBook Pro(2.3GHz Intel Core i7,运行Mac OS X10.7.4)上重现了该问题,并表明该问题已在修订版中修复(但测试只能显示存在的错误) ,从来没有他们缺席)。

(特此授权您出于归属将此代码用于任何目的。)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4976644.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存