Chinaunix首页 | 论坛 | 博客
  • 博客访问: 566024
  • 博文数量: 375
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-20 10:21
文章分类

全部博文(375)

文章存档

2015年(1)

2014年(374)

分类: LINUX

2014-08-18 14:11:38

原文地址:mkdir()创建多级目录 作者:zooyo


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int find_path(const char *path) {
  5.     if (path == NULL)    return -1;
  6.     char *temp = strdup(path);
  7.     char *p;
  8.     
  9.     /* 如果返回不是NULL,把找到最后一个'/'字符的地址
  10.     赋值给指针p,然后把该位置截断为0 */
  11.     if ((p = strrchr(temp, '/')) != NULL)
  12.         *p = '\0';
  13.     /* 取得文件名 */
  14.     printf("filename: %s\n", p+1);
  15. #if 0
  16.     /* for循环处理原理和strrchr一样 */
  17.     char *pos = temp;
  18.     int i = 0;
  19.     for ( ; *pos != '\0'; ++ pos) {
  20.         if (*pos == '/') {
  21.             p = pos;
  22.             i++;
  23.         }
  24.     }
  25.     if(i)    *p = '\0';
  26. #endif

  27.     printf("PATH is %s\n", temp);
  28.     free(temp);
  29.     return 0;
  30. }

  31. int mkdir_r(const char *path) {
  32.         if (path == NULL) {
  33.                 return -1;
  34.         }
  35.         char *temp = strdup(path);
  36.         char *pos = temp;

  37.         /* 去掉开头的 './''/' */
  38.         if (strncmp(temp, "/", 1) == 0) {
  39.                 pos += 1;
  40.         } else if (strncmp(temp, "./", 2) == 0) {
  41.                 pos += 2;
  42.         }
  43.         
  44.         /* 循环创建目录 */
  45.         for ( ; *pos != '\0'; ++ pos) {
  46.                 if (*pos == '/') {
  47.                         *pos = '\0';
  48.                         mkdir(temp, 0644);
  49.                         printf("for %s\n", temp);
  50.                         *pos = '/';
  51.                 }
  52.         }
  53.         
  54.         /* 如果最后一级目录不是以'/'结尾,
  55.         遇到'\0'就中止循环,
  56.         不会创建最后一级目录 */
  57.         if (*(pos - 1) != '/') {
  58.                 printf("if %s\n", temp);
  59.                 mkdir(temp, 0644);
  60.         }
  61.         free(temp);
  62.         return 0;
  63. }

  64. int main() {
  65. //        mkdir_r("./a/b/c/d");
  66.         find_path("/test/abc/foo.sh");
  67.         return 0;
  68. }

阅读(1325) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~