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

Posted

技术标签:

【中文标题】如何在 C 中授予完整文件权限【英文标题】:HowTo grant Full file Permission in C 【发布时间】:2012-05-13 20:47:43 【问题描述】:

我正在使用帖子592448 中显示的代码示例来尝试授予完整文件权限。当我使用以下代码编译代码 sn-p 时:

 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】:

请注意,在 Windows 上,所有这些都可以将文件设置为只读或不设置,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 是等价的。

【讨论】:

使用我的文件和模式 777 调用 fchmod 不会将文件的权限更改为 read,write,exec 你是为 windows 还是 *nix 编译这个? windows编译执行 那是你的问题。在 Windows 中权限的工作方式与在 unix 上完全不同。 _chmod 只能将文件更改为只读/只读。见documentation

以上是关于如何在 C 中授予完整文件权限的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中授予文件夹权限?

如何在 Windows 8 上通过 C++ MFC 授予“所有人”写入权限?

如何使用批处理文件将文件夹权限授予所有人组

如何在 Policy 中授予用户权限?

如何在docker容器文件夹中授予文件夹权限

如何在 IIS 中授予 Web api 应用程序写入权限?