我正在用C编写本机可执行二进制文件,它将编写android设备节点:/sys/class/leds/lcd-brightness/brightness。将其推到/system/bin并以根用户身份运行。
但是,系统调用write将返回错误消息:“write:无效参数”
代码如下:

// set background brightness
int bfd = open("/sys/class/leds/lcd-backlight/brightness", O_WRONLY);

if(bfd < 0 ) {
    perror("open");
    exit(EXIT_FAILURE);
}

printf("bfd: %d\n", bfd);
printf("*p: %d\n", (int)*p);
if(write(bfd, p, 1) < 0) {
    free(p);
    perror("write");
    exit(EXIT_FAILURE);
}
close(bfd);
close(fd);

p是指向数据的指针,我在写之前打印*p,没关系。
/sys/class/leds/lcd-brightness/brightness具有以下文件权限:
-rw-rw-rw 1 system system 4096 2018-04-18 18:46 brightness

我可以用adb shell中的以下命令作为根命令成功地覆盖这个文件
echo 100 > /sys/class/leds/lcd-backlight/brightness

我的密码怎么了?我在这个问题上挣扎了好几个小时。如有任何建议,我们将不胜感激。
谢谢你

最佳答案

你的问题似乎是权限,所以你需要设置写入文件的标志
下面是您必须设置的不同标志。
尝试此代码

int bfd = open("/sys/class/leds/lcd-backlight/brightness", O_WRONLY | O_APPEND | S_IWUSR |S_IXUSR |S_IXOTH);

S_IRUSR将所有者的读取权限设置为true。
S_IWUSR将所有者的写入权限设置为true。
S_IXUSR将所有者的执行权限设置为true。
S_IRGRP将组的读取权限设置为true。
S_IWGRP将组的写入权限设置为true。
S_IXGRP将组的执行权限设置为true。
S_IROTH将其他用户的读取权限设置为true。
S_IWOTH将其他用户的写入权限设置为true。
S_IXOTH将其他用户的执行权限设置为true。
希望这有帮助

08-27 16:33