本文共 1126 字,大约阅读时间需要 3 分钟。
#include
#include
#include
#include
#include
#include
#include
#include
#include
static int do_mkdir(const char *path, mode_t mode)
{
struct stat st;
int status = 0;
if (stat(path, &st) != 0)
{ /* Directory does not exist */
if (mkdir(path, mode) != 0)
status = -1;
}
else if (!S_ISDIR(st.st_mode))
{
errno = ENOTDIR;
status = -1;
}
return(status);
}
/** ** mkpath - ensure all directories in path exist
** Algorithm takes the pessimistic view and works top-down to ensure
** each directory in path exists, rather than optimistically creating
** the last element and working backwards. */
static 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)
{ /* Neither root nor double slash in path */
*sp = '\0';
printf("func(%s)line(%d), copypath(%s).\n", __func__, __LINE__, copypath);
status = do_mkdir(copypath, mode);
*sp = '/';
}
pp = sp + 1;
}
if (status == 0)
status = do_mkdir(path, mode);
free(copypath);
printf("func(%s)line(%d).\n", __func__, __LINE__);
return (status);
}
转载地址:http://dcevl.baihongyu.com/