Ubuntu系统中打开系统文件夹文件及读取/proc/loadavg失败求助
问题分析与修复
你的代码总是进入错误分支,核心原因有两个:
1. 打开文件的权限错误
/proc/loadavg 是Linux系统下的只读虚拟文件,你用 O_RDWR(读写模式)去打开它必然会失败,系统会返回权限不足的错误。应该改用 O_RDONLY(只读模式)。
2. main函数的参数定义不符合标准
标准C的main函数签名应该是 int main(int argc, char *argv[]),你写的 int main(char const *filepath) 不符合规范,可能导致程序运行时的未定义行为。
另外,还有几个可以优化的点:
- 错误分支里可以用
perror()打印具体的错误信息,方便排查问题(比如权限、文件不存在等) - 读取完成后要调用
close(fd)关闭文件描述符,避免资源泄漏 /proc/loadavg内容很短,一次read就能读完,不需要循环读取
修复后的代码
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> // 假设你的my_putstr是自定义的字符串输出函数 void my_putstr(const char *str) { while (*str) { write(STDOUT_FILENO, str++, 1); } } int main(int argc, char *argv[]) { char buffer[1000]; int fd = open("/proc/loadavg", O_RDONLY); ssize_t read_fd; if (fd != -1) { read_fd = read(fd, buffer, sizeof(buffer) - 1); if (read_fd > 0) { buffer[read_fd] = '\0'; my_putstr(buffer); } close(fd); // 关闭文件描述符 } else { perror("Failed to open /proc/loadavg"); // 打印具体错误 exit(84); } return 0; }
额外说明
- 编译时记得用标准命令,比如
gcc your_code.c -o loadavg_reader - 如果还是有问题,可以运行
ls -l /proc/loadavg确认文件存在,以及当前用户是否有读取权限(普通用户默认都有读取权限)
内容的提问来源于stack exchange,提问作者Tempest_Sword
相关产品推荐
相关产品推荐

