在 Linux 下用 C++ 修改文件/进程权限,常见有几种方式,取决于你想“改什么权限”。下面按最常见的场景给你说明。
chmod(推荐)chmod 755 test.cpp
chmod +x program
chmod#include <sys/stat.h>
#include <iostream>
int main() {
if (chmod("test.txt", S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) == -1) {
perror("chmod failed");
} else {
std::cout << "权限修改成功" << std::endl;
}
return 0;
}
常用宏:
| 宏 | 含义 |
|---|---|
S_IRUSR |
用户读 |
S_IWUSR |
用户写 |
S_IXUSR |
用户执行 |
S_IRGRP |
组读 |
S_IROTH |
其他读 |
等价于:
chmod("test.txt", 0644);
#include <unistd.h>
int main() {
chown("test.txt", 1000, 1000); // uid, gid
return 0;
}
⚠️ 需要 root 权限
setuid / setgid#include <unistd.h>
#include <sys/types.h>
int main() {
setuid(0); // 切换到 root(需要程序有 SUID 位)
return 0;
}
配合:
sudo chown root program
sudo chmod u+s program
⚠️ 非常危险,谨慎使用
g++ main.cpp -o main
chmod +x main
| 场景 | 方法 |
|---|---|
| 文件不能读写 | chmod |
| 程序无法执行 | chmod +x |
| 配置文件被拒绝访问 | 检查用户/组 |
| 需要 root 权限 | sudo / setuid |
| systemd / 服务权限 | 修改 service 文件 |
❌ Permission denied
✅ 检查:
sudo你可以直接告诉我:
我可以给你 针对你项目的完整示例代码。