使用特定权限创建路径的正确方法

时间:2014-03-13 08:58:33

标签: c path mkdir

使用C语言开发,我想编写一个函数,使用函数int mkdir(const char *pathname, mode_t mode)创建具有特定权限的路径。我对一个可行的解决方案不感兴趣(我知道该怎么做),我对正确的解决方案感兴趣,这是一种良好实践的解决方案。

我的问题如下:

如何正确处理umask和模式以获得请求的权限?

我想到了两个解决方案:

int create_path(char *pathname, mode_t mode, mode_t umask_wanted)
{
    mode_t old_mask = umask(umask_wanted);
    mkdir(pathname, mode);
    umask(old_mask);
}

或者

int create_path(char *pathname, mode_t mode)
{
    mode_t old_mask = umask(0);
    mkdir(pathname, mode);
    umask(old_mask);
}

或者为不同的面具创建不同的功能,以确保该功能的用户真正意识到他的所作所为。

还是其他什么?

如何正确处理完整路径的创建?

这是一段显示解决方案的代码,但它可能会退出天真。

int create_path(char *pathname, mode_t mode)
{
    int i;
    char* path = malloc(strlen(pathname) + 1);
    if (path==0)
    strcpy(path, pathname);
    for(i=0; path[i] != '\0'; i++)
    {
        if (path[i] == '/')
        {
            path[i] = '\0';
            mkdir(path, mode);
            path[i] = '/';
        }
    }
    free(path);
}

这是一种良好做法的解决方案吗?或者更好的主意?

如果路径的一部分已经存在,如何处理权限?

我们是否应该更改现有文件夹的权限以适应指定的模式?

或者我们应该只在它提供更多许可的情况下进行更改吗?


注意:这些代码只是举例说明我的问题。对于该解决方案,我将管理mkdir的错误并将所有这些错误混合在一个函数中。

注2:我假设函数的用户知道他做了什么以及他需要什么样的权限; - )

0 个答案:

没有答案