在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遞歸