如何在C中授予完整文件权限

时间:2012-05-04 09:55:15

标签: c file file-permissions

我正在使用帖子592448中显示的代码示例来尝试授予完整文件权限。当我使用:

编译代码片段时
 gcc -shared -mno-cygwin -Wall -o native.dll native.c

我得到以下错误:

native.c:8: error: conflicting types for 'mode_t'
/usr/i686-pc-mingw32/sys-root/mingw/include/sys/types.h:99: error: previous declaration of 'mode_t' was here
native.c:21: error: parse error before numeric constant
native.c:22: error: parse error before numeric constant
native.c:23: error: parse error before numeric constant
native.c:25: error: parse error before "mode_t"
native.c:26: error: parse error before "mode_t"
native.c:28: error: parse error before "mode_t"
native.c:29: error: parse error before "mode_t"

我删除了代码以减少到以下,编译得很好,但似乎没有根据需要更改文件权限。

#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>

#ifdef _WIN32
#   include <io.h>

typedef signed int md_t;
static const md_t MS_MODE_MASK = 0x0000ffff;           ///< low word

int fchmod(const char * path, md_t mode)
{
    int result = _chmod(path, (mode & MS_MODE_MASK));

    if (result != 0)
    {
        result = errno;
    }

    return (result);
}
#else
int fchmod(const char * path, md_t mode)
{
    int result = chmod(path, mode);

    if (result != 0)
    {
        result = errno;
    }

    return (result);
}
#endif

有关如何使其工作的任何指示?

1 个答案:

答案 0 :(得分:1)

请注意,在Windows上,所有这些操作都可以将文件设置为readonly与否,Windows文件权限与UNIX类型文件权限不同。

如果这就是你想要做的:它以什么方式不起作用?

编辑:关于您在其他位置mode_t定义的初始错误:/usr/i686-pc-mingw32/sys-root/mingw/include/sys/types.h:99并尝试将其重新定义为typedef int mode_t;

来自MSDN

  

如果未给出写入权限,则该文件是只读的。请注意,所有文件始终可读;不可能提供只写权限。因此模式_S_IWRITE和_S_IREAD | _S_IWRITE是等价的。