在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平台下分隔符则只能为 "/"。
以下是一个简单的例子:
#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/