c - fchmod() 无法在 C 中正确应用文件权限

标签 c linux filesystems

这是我尝试对文件应用权限的部分代码。

fd=fopen(file_name,"wb");
fchmod(fd,(mode_t)perm);

其中 perm 是一个整数。例如:644 或 755 我试过不使用模式进行转换。

最佳答案

除了已经提到的使用八进制常量的问题外,您错误地调用了 fchmod - 原型(prototype)是:

 int
 fchmod(int fildes, mode_t mode);
        ^^^^^^^^^^

但是您正在为第一个参数传递 FILE *(由 fopen 返回)!要么使用 open 而不是 fopen,这样您就可以使用 int fildes,或者使用 chmod文件名。

这里有两条重要的要点:

  1. 您应该始终启用编译器警告,并注意任何警告。如果您这样做了,那么很明显您错误地调用了 fchmod

  2. fchmod 这样的调用会返回一个状态 - 你不应该忽略它!在您的情况下,它很可能是非零的,因为您传递了一个无效的 fildes 参数。因此,即使代码是正确的,您仍然可以从非零状态中学到一些东西。

关于c - fchmod() 无法在 C 中正确应用文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25301577/

相关文章:

c - 正交缩放opengl视口(viewport)

c - 如何从 Visual Studio 命令提示符链接头文件?

c - 每当我使用索引作为全局变量时,我都会收到错误

c++ - C++中的Web服务器,如何发送图像

linux - Shred:不适用于 Journaled FS?

c++ - 标记 int unsigned 的编译器优化?

c - 如何从 C 程序和 Ubuntu 操作系统读取远程设备的文件?

c - 如果我使用 libnetfilter_queue 进行更改,网络数据包将被拒绝

c - fuse 文件系统问题

c# - 通过 C# 确定字符串是否为有效文件路径