我正在用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。希望这有帮助