建立多級目錄

  在UNIX平臺下有一個建立目錄的API接口 mkdir(),該函數使用比較簡單,但若是須要建立多級目錄,則操做起來就稍微麻煩些,也有一些公開的代碼實現了建立多級目錄的功能,而不少都是採用遞歸調用 mkdir() 建立目錄的方式。在 Postfix 代碼也有一段代碼用於建立多級目錄,它的優勢是迭代方式建立多級目錄,而不是遞歸調用 mkdir(),因而乎ACL做者將其改造了一下(主要增長了針對WIN32的支持),加入ACL庫中。接口比較簡單,以下:函數

/**
 * 功能: 建立多級目錄結構
 *  如建立 "/tmp/dir1/dir2" (for unix) 或 "C:\\test\\test1\\test2" (for win32)
 * @param path: 一級或多級目錄路徑
 * @param perms: 建立權限(如: 0755, 0777, 0644 ...)
 * @return == 0: OK;  == -1, Err
 */
ACL_API int acl_make_dirs(const char *path, int perms);

 

  該函數接口在UNIX、WIN32平臺下徹底一致,只是在WIN32平臺下,其中的參數 perms 是無效的,此外,還有一個差異就是在WIN32平臺下各級目錄分隔符能夠爲 "/" 或 "\",而在UNIX平臺下分隔符則只能爲 "/"。.net

  如下是一個簡單的例子:unix

#include "lib_acl.h"
#include <stdio.h>

static void test_mkdirs(void)
{
    const char *path = "path1\\path2\\path3\\path4";
    int   perms = 0700, ret;

    ret = acl_make_dirs(path, perms);
    if (ret < 0) {
        printf("create path(%s) error(%s)\n", path, acl_last_serror());
    } else {
        printf("create path(%s) ok\n", path);
    }
}

int main(int argc acl_unused, char *argv[] acl_unused)
{
    test_mkdirs();
    return (0);
}
 

 acl 庫下載: http://acl.sourceforge.net/code

   我的微博:http://weibo.com/zsxxsz遞歸

相關文章
相關標籤/搜索