红联Linux门户
Linux帮助

为Android增加一个关机命令

发布时间:2015-10-21 10:20:29来源:linux网站作者:mcgrady_tracy

首先在external目录下创建一个目录shutdown,然后进入shutdown目录,创建两个文件Android.mk和shutdown.c,增加内容如下:

#define LOG_TAG "shutdown" 
 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/reboot.h> 
 
#include <utils/Log.h> 
 
int main(int argc, char *argv[]) 

int ret; 
 
ALOGI("Shutdown now...\n"); 
ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, 
RB_POWER_OFF, NULL); 
if (ret < 0) { 
ALOGE("Shutdown failed!\n"); 
exit(-1); 

 
return 0; 


Android.mk

LOCAL_PATH :=$(call my-dir) 
 
include $(CLEAR_VARS) 

LOCAL_SRC_FILES := shutdown.c
LOCAL_SHARED_LIBRARIES := liblog 

LOCAL_MODULE := shutdown 

include $(BUILD_EXECUTABLE)


mm方式编译一下,然后push到/system/bin目录下,执行shutdown命令就可以实现关机操作了。


shutdown.c修改如下:

#define LOG_TAG "shutdown" 
 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/reboot.h> 
 
#include <utils/Log.h> 
 
int main(int argc, char *argv[]) 

int ret; 

ALOGI("Shutdown now...\n"); 
/*ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
RB_POWER_OFF, NULL);*/ 
ret = reboot(RB_POWER_OFF); 
if (ret < 0) { 
ALOGE("Shutdown failed!\n"); 
exit(-1); 

return 0; 
}


这里采用reboot这个系统调用,这个系统调用是glibc提供的,原型如下:

#include <unistd.h> 
#include <sys/reboot.h> 

int reboot(int cmd); 


通过man可以看到常见支持下面的命令:

LINUX_REBOOT_CMD_RESTART
LINUX_REBOOT_CMD_POWER_OFF

分别对应重启和关机,而这里为什么用了RB_POWER_OFF这个参数呢,可以在android中的bionic/libc/include/sys/reboot.h文件中看到RB_POWER_OFF就是一个宏定义,定义为LINUX_REBOOT_CMD_POWER_OFF。


什么关机命令使Linux能自动关闭电源:http://www.linuxdiyf.com/linux/4945.html