android init.rc 语法分析
此文来自于对http://source.android.com/porting/index.html中bring up段的简译。其中有一处与源码的
-----------------------------------------------
注1:另外还讲述了怎样输出log:
---------------
By default, programs executed by init will drop stdout and stderr into
/dev/null. To help with debugging, you can execute your program via the
Andoird program logwrapper. This will redirect stdout/stderr into the
Android logging system (accessed via logcat).
For example
service akmd /system/bin/logwrapper /sbin/akmd
注2:讲述了一个新的命令
Set the system clock base (0 if system clock ticks in GMT)
注3:triggers
This is the first trigger that will occur when init starts
(after /init.conf is loaded)
<name>=<value>
Triggers of this form occur when the property <name> is set
to the specific value <value>.
device-added-<path>
device-removed-<path>
Triggers of these forms occur when a device node is added
or removed.
service-exited-<name>
Triggers of this form occur when the specified service exits.
------------------------------------------
init 由如下四种类型语句组成:
- Actionn :行为
- Commands
- Services
- Options
语法(language syntax)结构如下:
- 每一个语句占据一行,并且各个关键字被空格分开。c规范中的(如 \n)反斜杠将被忽略(backslash escapes)而被认为是一个空格 ,双引号用来保证空格不会把一个文字串分分为多个关键字。行最后的反斜杠用作续行。
- 由 # (前面允许有空格)开始的行都是注释行(comment)
- 一个actions 或 services 的开始隐含声明了一个新的段,所有commands 或 options 属于最近的声明。在第一个段之前的 commands 或 options 都会被忽略
- 每一个actions 和 services 都有不同的名字。后面与前面发生重名的,那么这个后面重名的将被忽略或被认为是一个错误
Actions
Actions其实就是一组被命名的命令序列。actions 都有一个触发条件,触发条件决定了action何时执行。当一个事件发生如果匹配action的触发条件,那么这个action将会被添加到预备执行队列的尾部(除非它已经在队列当中)
每一个action中的命令将被顺序执行。init进程负责在其它activities(如:设备创建/销毁,属性设置,进程重启)之间执行这些命令序列。
action 的格式如下
on <trigger>
<command>
<command>
<command>
Services
services 是一些由init 启动 和 重新(如果有需要)启动的程序,当然这些程序如果是存在的。
service <name> <pathname> [ <argument> ]*
<option>
<option>
...
Options
options 是service的修饰符,用来告诉init 怎样及何时启动service。
Option | Description |
---|---|
disabled |
This service will not automatically start with its class. It must be explicitly started by name. |
socket <type> <name> <perm> [ <user> [ <group> ] ] |
Create a unix domain socket named values include |
user <username> |
Change to username before exec'ing this service. Currently defaults to root. |
group <groupname> [ <groupname> ]* |
Change to groupname before exec'ing this service. Additional groupnames beyond the first, which is required, are used to set additional groups of the process (withsetgroups() ). Currently defaults to root. |
capability [ <capability> ]+ |
Set linux capability before exec'ing this service |
oneshot |
Do not restart the service when it exits. |
class <name> |
Specify a class name for the service. All services in a named class must start and stop together. A service is considered of class "default" if one is not specified via the class option. |
Triggers
Triggers are strings used to match certain kinds of events that cause an action to occur.
Trigger | Description |
---|---|
boot |
This is the first trigger that occurs when init starts (after /init.conf is loaded). |
<name>=<value> |
Triggers of this form occur when the property <name> is set to the specific value<value> . |
device-added-<path> |
Triggers of these forms occur when a device node is added or removed. |
service-exited-<name> |
Triggers of this form occur when the specified service exits. |
Commands
Command | Description |
---|---|
exec <path> [ <argument> ]* |
Fork and execute a program (<path> ). This will block until the program completes execution. Try to avoid exec. Unlike the builtin commands, it runs the risk of getting init "stuck". |
export <name> <value> |
Set the environment variable <name> equal to <value> in the global environment (which will be inherited by all processes started after this command is executed). |
ifup <interface> |
Bring the network interface <interface> online. |
import <filename> |
Parse an init config file, extending the current configuration. |
hostname <name> |
Set the host name. |
class_start <serviceclass> |
Start all services of the specified class if they are not already running. |
class_stop <serviceclass> |
Stop all services of the specified class if they are currently running. |
domainname <name> |
Set the domain name. |
insmod <path> |
Install the module at <path> . |
mkdir <path> |
Make a directory at <path> . |
mount <type> <device> <dir> [ <mountoption> ]* |
Attempt to mount the named device at the directory <dir> <device> . This may be of the form mtd@name to specify a mtd block device by name. |
setkey |
- currenlty undefined - |
setprop <name> <value> |
Set system property <name> to <value> . |
setrlimit <resource> <cur> <max> |
Set the rlimit for a resource. |
start <service> |
Start a service running if it is not already running. |
stop <service> |
Stop a service from running if it is currently running. |
symlink <target> <path> |
Create a symbolic link at <path> with the value <target> . |
write <path> <string> [ <string> ]* |
Open the file at <path> and write one or more strings to it with write(2). |
Properties
Init updates some system properties to provide some insight into
what it's doing:
Property | Description |
---|---|
init.action |
Equal to the name of the action currently being executed or "" if none. |
init.command |
Equal to the command being executed or "" if none. |
init.svc.<name> |
State of a named service ("stopped", "running", or "restarting"). |
在init.rc中使用属性的范例如下:
setprop ro.FOREGROUND_APP_MEM 1536 setprop ro.VISIBLE_APP_MEM 2048 on property:ro.kernel.qemu=1 start adbd |
setprop用于设置属性,on property可以用于判断属性,这里的属性在整个Android系统运行中都是一致的。
init脚本中的关键字可以参考:system/core/init/keywords.h
exam init.rc
---------------------------
sysclktz 0
loglevel 3
# setup the global environment
export PATH /sbin:/system/sbin:/system/bin:/system/xbin:/system/busybox/bin:/system/busybox/sbin:/system/busybox/usr/bin:/system/busybox/usr/sbin
export LD_LIBRARY_PATH /system/lib
export ANDROID_BOOTLOGO 1
export ANDROID_ROOT /system
export ANDROID_ASSETS /system/app
export ANDROID_DATA /data
export EXTERNAL_STORAGE /sdcard
export BOOTCLASSPATH /system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar
# Backward compatibility
symlink /system/etc /etc
symlink /sys/kernel/debug /d
# create mountpoints and mount tmpfs on sqlite_stmt_journals
mkdir /sdcard 0000 system system
mkdir /system
mkdir /data 0771 system system
mkdir /cache 0770 system cache
mkdir /config 0500 root root
mkdir /sqlite_stmt_journals 01777 root root
mount tmpfs tmpfs /sqlite_stmt_journals size=4m
#{{ added by FriendlyARM
mkdir /udisk 0000 system system
mkdir /var 0000 system system
mount tmpfs tmpfs /var size=2m
mkdir /var/lock
mkdir /var/run
mkdir /var/log
mount usbfs none /proc/bus/usb -o devmode=0666
chmod 0666 /dev/backlight-1wire
#}}
## mount rootfs rootfs / ro remount
write /proc/sys/kernel/panic_on_oops 1
write /proc/sys/kernel/hung_task_timeout_secs 0
write /proc/cpu/alignment 4
write /proc/sys/kernel/sched_latency_ns 10000000
write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000
write /proc/sys/kernel/sched_compat_yield 1
write /proc/sys/kernel/sched_child_runs_first 0
# Create cgroup mount points for process groups
mkdir /dev/cpuctl
mount cgroup none /dev/cpuctl cpu
chown system system /dev/cpuctl
chown system system /dev/cpuctl/tasks
chmod 0777 /dev/cpuctl/tasks
write /dev/cpuctl/cpu.shares 1024
mkdir /dev/cpuctl/fg_boost
chown system system /dev/cpuctl/fg_boost/tasks
chmod 0777 /dev/cpuctl/fg_boost/tasks
write /dev/cpuctl/fg_boost/cpu.shares 1024
mkdir /dev/cpuctl/bg_non_interactive
chown system system /dev/cpuctl/bg_non_interactive/tasks
chmod 0777 /dev/cpuctl/bg_non_interactive/tasks
# 5.0 %
write /dev/cpuctl/bg_non_interactive/cpu.shares 52
# mount mtd partitions
# Mount /system rw first to give the filesystem a chance to save a checkpoint
## mount yaffs2 mtd@system /system
## mount yaffs2 mtd@system /system ro remount
# We chown/chmod /data again so because mount is run as root + defaults
## mount yaffs2 mtd@userdata /data nosuid nodev
chown system system /data
chmod 0771 /data
# Create dump dir and collect dumps.
# Do this before we mount cache so eventually we can use cache for
# storing dumps on platforms which do not have a dedicated dump partition.
mkdir /data/dontpanic
chown root log /data/dontpanic
chmod 0750 /data/dontpanic
# Collect apanic data, free resources and re-arm trigger
copy /proc/apanic_console /data/dontpanic/apanic_console
chown root log /data/dontpanic/apanic_console
chmod 0640 /data/dontpanic/apanic_console
copy /proc/apanic_threads /data/dontpanic/apanic_threads
chown root log /data/dontpanic/apanic_threads
chmod 0640 /data/dontpanic/apanic_threads
write /proc/apanic_console 1
# Collect ramconsole data
copy /proc/last_kmsg /data/dontpanic/last_kmsg
chown root log /data/dontpanic/last_kmsg
chmod 0640 /data/dontpanic/last_kmsg
# Same reason as /data above
## mount yaffs2 mtd@cache /cache nosuid nodev
chown system cache /cache
chmod 0770 /cache
# This may have been created by the recovery system with odd permissions
chown system system /cache/recovery
chmod 0770 /cache/recovery
#change permissions on vmallocinfo so we can grab it from bugreports
chown root log /proc/vmallocinfo
chmod 0440 /proc/vmallocinfo
# create basic filesystem structure
mkdir /data/misc 01777 system misc
mkdir /data/misc/bluetoothd 0777 bluetooth bluetooth
mkdir /data/misc/keystore 0700 keystore keystore
mkdir /data/misc/vpn 0770 system system
mkdir /data/misc/vpn/profiles 0770 system system
mkdir /data/misc/wifi 0777 wifi wifi
mkdir /data/misc/wifi/sockets 0777 system wifi
chmod 0777 /data/misc/wifi
chmod 0777 /data/misc/wifi/wpa_supplicant.conf
# give system access to wpa_supplicant.conf for backup and restore
chmod 0777 /system/etc/wifi/wpa_supplicant.conf
mkdir /data/misc/dhcp 0770 dhcp dhcp
chown dhcp dhcp /data/misc/dhcp
mkdir /data/local 0771 shell shell
mkdir /data/local/tmp 0771 shell shell
mkdir /data/data 0771 system system
mkdir /data/app-private 0771 system system
mkdir /data/app 0771 system system
mkdir /data/property 0700 root root
# create dalvik-cache and double-check the perms
mkdir /data/dalvik-cache 0771 system system
chown system system /data/dalvik-cache
chmod 0771 /data/dalvik-cache
# create the lost+found directories, so as to enforce our permissions
mkdir /data/lost+found 0770
mkdir /cache/lost+found 0770
# double check the perms, in case lost+found already exists, and set owner
chown root root /data/lost+found
chmod 0770 /data/lost+found
chown root root /cache/lost+found
chmod 0770 /cache/lost+found
#===================================================================
#
# debug fs enable for wifi & bluetooth
#
#===================================================================
mount debugfs none /sys/kernel/debug
on boot
# basic network init
ifup lo
ifup eth0
ifup eth1
hostname localhost
domainname localdomain
# set RLIMIT_NICE to allow priorities from 19 to -20
setrlimit 13 40 40
# Define the oom_adj values for the classes of processes that can be
# killed by the kernel. These are used in ActivityManagerService.
setprop ro.FOREGROUND_APP_ADJ 0
setprop ro.VISIBLE_APP_ADJ 1
setprop ro.SECONDARY_SERVER_ADJ 2
setprop ro.BACKUP_APP_ADJ 2
setprop ro.HOME_APP_ADJ 4
setprop ro.HIDDEN_APP_MIN_ADJ 7
setprop ro.CONTENT_PROVIDER_ADJ 14
setprop ro.EMPTY_APP_ADJ 15
# Define the memory thresholds at which the above process classes will
# be killed. These numbers are in pages (4k).
setprop ro.FOREGROUND_APP_MEM 1536
setprop ro.VISIBLE_APP_MEM 2048
setprop ro.SECONDARY_SERVER_MEM 4096
setprop ro.BACKUP_APP_MEM 4096
setprop ro.HOME_APP_MEM 4096
setprop ro.HIDDEN_APP_MEM 5120
setprop ro.CONTENT_PROVIDER_MEM 5632
setprop ro.EMPTY_APP_MEM 6144
#Wifi
# insmod /system/lib/libwifi/lib80211.ko
# insmod /system/lib/libwifi/lib80211_crypt_ccmp.ko
# insmod /system/lib/libwifi/lib80211_crypt_tkip.ko
# insmod /system/lib/libwifi/lib80211_crypt_wep.ko
# insmod /system/lib/modules/2.6.27/kernel/net/bluetooth/bluetooth.ko
# insmod /system/lib/modules/2.6.27/kernel/drivers/bluetooth/hci_uart.ko
# insmod /system/lib/modules/2.6.27/kernel/net/bluetooth/l2cap.ko
# insmod /system/lib/modules/2.6.27/kernel/net/bluetooth/rfcomm/rfcomm.ko
setprop wifi.interface eth1
setprop wlan.interface eth1
setprop wlan.driver.status ok
setprop wlan.modpath /system/lib/libwifi/
setprop wlan.mod1 libertas.ko
setprop wlan.mod2 libertas_sdio.ko
# Write value must be consistent with the above properties.
# Note that the driver only supports 6 slots, so we have HOME_APP at the
# same memory level as services.
write /sys/module/lowmemorykiller/parameters/adj 0,1,2,7,14,15
write /proc/sys/vm/overcommit_memory 1
write /proc/sys/vm/min_free_order_shift 4
write /sys/module/lowmemorykiller/parameters/minfree 1536,2048,4096,5120,5632,6144
# Set init its forked children's oom_adj.
write /proc/1/oom_adj -16
# Tweak background writeout
write /proc/sys/vm/dirty_expire_centisecs 200
write /proc/sys/vm/dirty_background_ratio 5
# Permissions for System Server and daemons.
chown radio system /sys/android_power/state
chown radio system /sys/android_power/request_state
chown radio system /sys/android_power/acquire_full_wake_lock
chown radio system /sys/android_power/acquire_partial_wake_lock
chown radio system /sys/android_power/release_wake_lock
chown radio system /sys/power/state
chown radio system /sys/power/wake_lock
chown radio system /sys/power/wake_unlock
chmod 0660 /sys/power/state
chmod 0660 /sys/power/wake_lock
chmod 0660 /sys/power/wake_unlock
chown system system /sys/class/timed_output/vibrator/enable
chown system system /sys/class/leds/keyboard-backlight/brightness
# chown system system /sys/class/leds/lcd-backlight/brightness
chown system system /sys/class/backlight/pwm-backlight/brightness
chown system system /sys/class/leds/button-backlight/brightness
chown system system /sys/class/leds/jogball-backlight/brightness
chown system system /sys/class/leds/red/brightness
chown system system /sys/class/leds/green/brightness
chown system system /sys/class/leds/blue/brightness
chown system system /sys/class/leds/red/device/grpfreq
chown system system /sys/class/leds/red/device/grppwm
chown system system /sys/class/leds/red/device/blink
chown system system /sys/class/leds/red/brightness
chown system system /sys/class/leds/green/brightness
chown system system /sys/class/leds/blue/brightness
chown system system /sys/class/leds/red/device/grpfreq
chown system system /sys/class/leds/red/device/grppwm
chown system system /sys/class/leds/red/device/blink
chown system system /sys/class/timed_output/vibrator/enable
chown system system /sys/module/sco/parameters/disable_esco
chown system system /sys/kernel/ipv4/tcp_wmem_min
chown system system /sys/kernel/ipv4/tcp_wmem_def
chown system system /sys/kernel/ipv4/tcp_wmem_max
chown system system /sys/kernel/ipv4/tcp_rmem_min
chown system system /sys/kernel/ipv4/tcp_rmem_def
chown system system /sys/kernel/ipv4/tcp_rmem_max
chown root radio /proc/cmdline
#bluetooth power up/down interface
# chown bluetooth bluetooth /sys/class/rfkill/rfkill0/type
# chown bluetooth bluetooth /sys/class/rfkill/rfkill0/state
# chmod 0660 /sys/class/rfkill/rfkill0/state
# chown bluetooth bluetooth /dev/s3c2410_serial1
chmod 0666 /dev/s3c2410_serial1
chmod 0666 /dev/s3c2410_serial2
chmod 0666 /dev/s3c2410_serial3
chmod 0666 /dev/video0
chmod 0666 /dev/s3c-jpg
# Define TCP buffer sizes for various networks
# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax,
setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.wifi 4095,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.edge 4093,26280,35040,4096,16384,35040
setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680
setprop net.dns1 8.8.8.8
setprop net.dns2 8.8.4.4
class_start default
setprop alsa.mixer.playback.master Front
setprop alsa.mixer.capture.master Capture
setprop alsa.mixer.playback.earpiece Master
setprop alsa.mixer.capture.earpiece Capture
setprop alsa.mixer.playback.headset Master
setprop alsa.mixer.playback.speaker Master
## Daemon processes to be run by init.
##
service console /system/bin/sh
#service console /system/busybox/bin/ash
console
# adbd is controlled by the persist.service.adb.enable system property
service adbd /sbin/adbd
disabled
# adbd on at boot in emulator
on property:ro.kernel.qemu=1
start adbd
on property:persist.service.adb.enable=1
start adbd
on property:persist.service.adb.enable=0
stop adbd
service servicemanager /system/bin/servicemanager
user system
critical
onrestart restart zygote
onrestart restart media
service vold /system/bin/vold
socket vold stream 0660 root mount
service tsd /sbin/tsd
service nexus /system/bin/nexus
socket nexus stream 0660 root system
disabled
#service mountd /system/bin/mountd
# socket mountd stream 0660 root mount
service debuggerd /system/bin/debuggerd
service udiskd /system/bin/udiskd
socket udiskd stream 666 root mount
service fanetworkservice /system/bin/fa-network-service
socket fa-network-service stream 666 radio radio
user root
group radio cache inet misc audio
#user radio
#group radio cache inet misc audio
service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so -- -d /dev/pts/0
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
user root
group radio cache inet misc audio
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
socket zygote stream 666
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart media
service media /system/bin/mediaserver
user media
group system audio camera graphics inet net_bt net_bt_admin
##service bootsound /system/bin/playmp3
## user media
## group audio
## oneshot
service bootanim /system/bin/bootanimation
user graphics
group graphics
disabled
oneshot
service dbus /system/bin/dbus-daemon --system --nofork
socket dbus stream 660 bluetooth bluetooth
user bluetooth
group bluetooth net_bt_admin
service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant -Dwext -ieth1 -c /system/etc/wifi/wpa_supplicant.conf -dd
group system wifi inet keystore
disabled
oneshot
service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -d eth1
disabled
oneshot
group system dhcp
on property:init.svc.wpa_supplicant=stopped
stop dhcpcd
service bluetoothd /system/bin/logwrapper /system/bin/bluetoothd -d -n
socket bluetooth stream 660 bluetooth bluetooth
socket dbus_bluetooth stream 660 bluetooth bluetooth
# init.rc does not yet support applying capabilities, so run as root and
# let bluetoothd drop uid to bluetooth with the right linux capabilities
group bluetooth net_bt_admin misc
disabled
# baudrate change 115200 to 1152000(Bluetooth)
service changebaudrate /system/bin/logwrapper /system/xbin/bccmd_115200 -t bcsp -d /dev/s3c2410_serial1 psset -r 0x1be 0x126e
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
#service hciattach /system/bin/logwrapper /system/bin/hciattach -n -s 1152000 /dev/s3c2410_serial1 bcsp 1152000
service hciattach /system/bin/logwrapper /system/bin/hciattach -n -s 115200 /dev/s3c2410_serial1 bcsp 115200
user bluetooth
group bluetooth net_bt_admin misc
disabled
service hfag /system/bin/sdptool add --channel=10 HFAG
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service hsag /system/bin/sdptool add --channel=11 HSAG
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service opush /system/bin/sdptool add --channel=12 OPUSH
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service pbap /system/bin/sdptool add --channel=19 PBAP
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
service installd /system/bin/installd
socket installd stream 600 system system
##service flash_recovery /system/etc/install-recovery.sh
## oneshot
service racoon /system/bin/racoon
socket racoon stream 600 system system
# racoon will setuid to vpn after getting necessary resources.
group net_admin
disabled
oneshot
service mtpd /system/bin/mtpd
socket mtpd stream 600 system system
user vpn
group vpn net_admin net_raw
disabled
oneshot
service keystore /system/bin/keystore /data/misc/keystore
user keystore
group keystore
socket keystore stream 666
service dumpstate /system/bin/dumpstate -s
socket dumpstate stream 0660 shell log
disabled
oneshot
android init.rc 语法分析的更多相关文章
- Android init.rc解析【转】
转自:http://www.linuxidc.com/Linux/2014-10/108438.htm 本文主要来自$Android_SOURCE/system/init/readme.txt的翻译. ...
- Android init.rc文件格式解析
/***************************************************************************** * Android init.rc文件格式 ...
- Android init.rc文件浅析
Android init.rc文件浅析 分类: Android2012-04-13 18:00 13149人阅读 评论(2) 收藏 举报 androidservicepathactionsocketc ...
- init进程 && 解析Android启动脚本init.rc && 修改它使不启动android && init.rc中启动一个sh文件
Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径:system/core/init,编译 ...
- MTK(android init.rc) 写一个开机启动的服务
在开机往往我们想要做一些初始化的操作,这时候可以使用init.rc文件来实现,当然书写一个开机启动的服务也需要规范的. 假设是C程序,则需要准备C程序的源码,在我的例程中是一个在开机完成(androi ...
- android init.rc命令快速对照表
注1:另外还讲述了怎样输出log: Debugging notes---------------By default, programs executed by init will drop stdo ...
- Android init.rc执行顺序
转自:http://blog.csdn.net/kickxxx/article/details/7590665 1. 所有的action运行于service之前 2. 下面为各个section的执行 ...
- android init.rc语法
转自:http://www.cnblogs.com/nokiaguy/p/3164799.html init.rc由如下4部分组成. 动作(Actions) 命令(Commands) 3. 服务(Se ...
- adb push init.rc /
http://blog.csdn.net/jumper511/article/details/28856249 修改Android init.rc文件后,需要将修改后的文件上传到手机,但是发下如下问题 ...
随机推荐
- 开发MOSS自定义字段类型
前段时间,由于刚好项目定制的需要,笔者就开发了几个自定义字段类型.在这抽空做个详细笔记,方便初学者学习.这方面的资料也很多,如果自身觉得不大明白可以参考下SDK和网上的相关文章.本章的目的主要是给新手 ...
- NoSQL数据库种类
NoSQL数据库的四大分类 键值(Key-Value)存储数据库 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据.Key/value模型对于IT系统来说的优 ...
- 第3章 Java语言基础----成员变量与局部变量
在对局部变量进行赋值时,不能对非静态字段age进行静态引用,图1错误,加上static后图二正确,图3与图4类似,如下图所示: 图1图2 图3图4 2.成员变量times在类中定义,局部变量times ...
- callback in C
callback is nothing but passing the function pointer to the code from where you want your handler/ c ...
- iOS长按选择
确实,其实就是一个长按手势 + 图片二维码识别,原生SDK从8.0开始支持 /** * 从照片中直接识别二维码 * @param qrCodeImage 带二维码的图片 * @param myQ ...
- 路由器wan口连接不上的问题
路由器:tp-link:系统:win8.1:网络类型:PPPoE 克隆“当前管理PC的MAC地址”后,无法连接,将网线直接连到电脑上可以连接,所以问题一定出在路由上,经过不断探索发现问题所在,通过命令 ...
- laravel使用多个数据库连接
1.配置.env文件 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database_name DB_USERNAME= ...
- redis - java 基本操作
import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; im ...
- 【java图形计算器】 java awt swing组件应用
package package1; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...
- poi设置excel表格边框、字体等
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb ...