You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:07:09