Linux chmod() 导致 errno 13

问题描述 投票:0回答:1

我正在尝试设置新文件的模组以匹配旧文件。我的 Qt5/C++ 代码大致是:

stat(oldFileName.toLatin1().data(), &sb);
bool success = chmod(newFileName.toLatin1().data(),sb.st_mode) 

调用chmod时sb.st_mode值为33261(八进制100755)。 chmod() 调用失败并将 errno 设置为 13(权限被拒绝)。然而程序运行为 uid 0 gid 0.


更新:看起来 stat() 还包括我需要删除的较高位的文件类型信息。我尝试使用 (sb.st_mode & 0x1FF which yields 0755) 作为 chmod 的值但仍然失败。

c linux chmod errno
1个回答
0
投票

有趣的是 chmod() 和 chown() 成功返回 0,失败返回 -1。这与 C/C++ 标准相反(0 表示错误,非 0 表示正确)。

所以你必须反转函数返回值才能用作布尔值。

© www.soinside.com 2019 - 2024. All rights reserved.