• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

narcasse

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

linux中实现“mkdir -p”功能的c函数

   1: int make_dirs(char *new_path, int perms)
   2: {
   3:     char *saved_path, *cp;
   4:     int saved_ch;
   5:     struct stat st;
   6:     int rc;
   7:  
   8:     cp = saved_path = strdup(new_path);
   9:     while (*cp && *cp == '/') ++cp;
  10:     
  11:     while (1) {
  12:         while (*cp && *cp != '/') ++cp;
  13:         if ((saved_ch = *cp) != 0)
  14:             *cp = 0;
  15:             
  16:         if ((rc = stat(saved_path, &st)) >= 0) {
  17:             if (!S_ISDIR(st.st_mode)) {
  18:                 errno = ENOTDIR;
  19:                 rc = -1;
  20:                 break;
  21:             }
  22:         } 
  23:         else {
  24:             if (errno != ENOENT ) {
  25:                break;
  26:             }
  27:             
  28:             if ((rc = mkdir(saved_path, perms)) < 0 ) {
  29:                 if (errno != EEXIST)
  30:                     break;
  31:                 
  32:                 if ((rc = stat(saved_path, &st)) < 0)
  33:                     break;
  34:                     
  35:                 if (!S_ISDIR(st.st_mode)) {
  36:                     errno = ENOTDIR;
  37:                     rc = -1;
  38:                     break;
  39:                 }                
  40:             }
  41:         }
  42:         
  43:         if (saved_ch != 0)
  44:             *cp = saved_ch;
  45:         
  46:         while (*cp && *cp == '/') ++cp;
  47:         if (*cp == 0)
  48:             break;
  49:     }
  50:     
  51:     free(saved_path);
  52:     return rc;
  53: }

posted on 2011-05-31 21:36  narcasse  阅读(1364)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3