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

C编写Android原生程序写入/sys节点报write: Invalid Argument错误求助

解决Android原生C程序写入sysfs亮度节点报"Invalid argument"的问题

这问题我之前帮不少开发者排查过,核心原因大多是对sysfs节点的写入规则不熟悉,咱们一步步拆解:

最可能的根源:写入内容格式错误

sysfs下的brightness节点要求写入字符串形式的十进制数字(部分设备还要求带换行符),而不是二进制整数。看你代码里的write(bfd, p,...,如果p是指向int类型的指针,直接把二进制整数写进去,系统根本无法解析,自然返回Invalid argument。

举个正确的写法:

// 假设*p是你要设置的亮度值(比如0-255之间的整数)
char brightness_buf[16];
// 把数字转成带换行的字符串
snprintf(brightness_buf, sizeof(brightness_buf), "%d\n", (int)*p);

ssize_t write_ret = write(bfd, brightness_buf, strlen(brightness_buf));
if (write_ret < 0) {
    perror("write");
    close(bfd);
    exit(EXIT_FAILURE);
}

其他需要排查的点

  • 路径是否匹配:你问题描述里写的是/sys/class/leds/lcd-brightness/brightness,但代码里是/sys/class/leds/lcd-backlight/brightness。不同Android设备的亮度节点命名可能不同,先在设备上执行ls /sys/class/leds/确认实际存在的节点名称,比如有些设备叫panel-backlight。
  • Open参数是否完整:虽然O_WRONLY基本够用,但部分节点可能需要加上O_TRUNC,可以试试open(path, O_WRONLY | O_TRUNC)。
  • SELinux限制:虽然你用root权限运行,但Android的SELinux可能会拦截写入操作。不过Invalid argument一般不是权限问题(权限不足会报Permission denied),如果前面的方法都无效,可以临时执行setenforce 0关闭SELinux测试,若能正常写入,再考虑添加对应的SELinux规则。

内容的提问来源于stack exchange,提问作者zhuo.quan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:37:57