【发布时间】:2013-07-23 23:24:16
【问题描述】:
在通过 Zed Shaw 的 learn C the Hard Way 的过程中,我遇到了根据 the documentation here 具有类型签名的函数 apr_dir_make_recursive()
apr_status_t apr_dir_make_recursive(const char *path, apr_fileperms_t perm, apr_pool_t *pool)
这使得目录,与 Unix 命令 mkdir -p 相同。
为什么 IO 函数需要内存池才能运行?
我的第一个想法是填充新创建的目录可能是一个可选参数,但是下面的代码使用了一个已初始化但假定为空的内存池。这是否意味着 IO 函数本身需要一个内存池,我们传入它以供它使用?但这似乎也不太可能。函数不能简单地创建一个本地内存池供它使用,然后在返回或错误时销毁?
那么,内存池有什么用呢?链接的文档在这一点上没有帮助。
为了好奇,代码被缩短并显示在下面。
int DB_init()
{
apr_pool_t *p = NULL;
apr_pool_initialize();
apr_pool_create(&p, NULL);
if(access(DB_DIR, W_OK | X_OK) == -1) {
apr_status_t rc = apr_dir_make_recursive(DB_DIR,
APR_UREAD | APR_UWRITE | APR_UEXECUTE |
APR_GREAD | APR_GWRITE | APR_GEXECUTE, p);
}
if(access(DB_FILE, W_OK) == -1) {
FILE *db = DB_open(DB_FILE, "w");
check(db, "Cannot open database: %s", DB_FILE);
DB_close(db);
}
apr_pool_destroy(p);
return 0;
}
【问题讨论】: