1.用作變數:
1-1:放在函數內
Ex:
void MyFun()
{
static int i=0;
}
說明:"i"為"static,i"的生命週期會到程式結束,但是他的scope 還是在MyFun()中,每次呼叫MyFun(),函數中"i"的值會保留上次呼叫最後一次設定的值。
1-2:放在函數外
Ex:檔案 abc.c 中寫了如下
static int s_i=0;
int myfun()
{}
說明:此時"s_i"只能在檔案"abc.c"中使用,他可以讓"abc.c"中所有的"function"看到,他的生命週期也是到程式結束,但是別的.c 檔是無法使用到"abc.c"檔中的"s_i"。
2.在function 前面加上"static"
Ex:檔案 123.c 中寫了如下
static void MyFun()
{return;}
說明:此時"MyFun()"只能給這個123.c 這個檔案中的其他function 呼叫。
(簡單的說,就是"MyFun()"這個function不會被linker 參考到)
資料來源:http://flykof.pixnet.net/blog/post/23583952
2010年5月28日 星期五
2010年5月24日 星期一
在 Windows 7 上執行Platform builder 5.0
create 一個批次檔(x.bat)。
內容:
@ehco
start cepb.exe
exit
@ehco
並放到\Windows CE Platform Builder\5.00\CEPB\BIN\ 下,以管理員身份運行這個bat即可。
資料來源:http://blog.csdn.net/AAa_tnT/archive/2010/01/23/5249062.aspx
內容:
@ehco
start cepb.exe
exit
@ehco
並放到\Windows CE Platform Builder\5.00\CEPB\BIN\ 下,以管理員身份運行這個bat即可。
資料來源:http://blog.csdn.net/AAa_tnT/archive/2010/01/23/5249062.aspx
2010年4月27日 星期二
2010年4月16日 星期五
轉-如何去寫Android init.rc (Android init language)
參考來源:http://embeddeder.spaces.live.com/blog/cns!8006E36532087D51!160.entry
=
如何去寫Android init.rc (Android init language)
Android初始化語言由四大類聲明組成:行為類(Actions),命令類(Commands),服務類(Services),選項類(Options).
* 初始化語言以行為單位,由以空格間隔的語言符號組成。C風格的反斜槓轉義符可以用來插入空白到語言符號。雙引號也可以用來防止文本被空格分成多個語言符號。當飯斜槓在行末時,作為折行符。
* 以#開始(前面允許有空格)的行為註釋行。
* Actions和Services隱含聲明一個新的段落。所有該段落下Commands或Options的聲明屬於該段落。第一段落前的Commands或Options被忽略。
* Actions和Services擁有獨一無二的命名。在它們之後聲明相同命名的類將被當作錯誤並忽略。
Actions
-------
Actions是一系列命令的命名。Actions擁有一個觸發器(trigger)用來決定action何時執行。當一個action在符合觸發條件被執行時,如果它還沒被加入到待執行隊列中的話,則加入到隊列最後。
隊列中的action依次執行,action中的命令也依次執行。Init在執行命令的中間處理其他活動(設備創建/銷毀,property設置,進程重啟)。
Actions表現形式為:
on
Services
--------
Services是由init啟動,在它們退出時重啟(可選)。Service表現形式為:
service [ ]*
...
Options
-------
Options是Services的修飾,它們影響init何時、如何運行service.
critical
這是一個設備關鍵服務(device-critical service) .如果它在4分鐘內退出超過4次,設備將重啟並進入恢復模式。
disabled
這個服務的級別將不會自動啟動,它必須被依照服務名指定啟動才可以啟動。
setenv
設置已啟動的進程的環境變量的值
socket [ [ ] ]
創建一個名為/dev/socket/的unix domin socket,並傳送它的fd到已啟動的進程。必須為"dgram"或"stream".用戶和組默認為0.
user
在執行服務前改變用戶名。當前默認為root.如果你的進程需要linux能力,你不能使用這個命令。你必須在還是root時請求能力,並下降到你需要的uid.
group [ ]*
在執行服務前改變組。在第一個組後的組將設為進程附加組(通過setgroups()).當前默認為root.
oneshot
在服務退出後不重啟。
class
為service指定一個類別名。同樣類名的所有的服務可以一起啟動或停止。如果沒有指定類別的服務默認為"default"類。
onrestart
當服務重啟時執行一個命令。
Triggers
--------
Triggers(觸發器)是一個字串,可以用來匹配某種類型的事件並執行一個action。
boot
這是當init開始後執行的第一個觸發器(當/init.conf被加載)
當property 被設為指定的值時觸發。
device-added-
device-removed-
當設備節點被添加或移除時觸發。
service-exited-
當指定的服務存在時觸發
Commands
--------
exec [ ]*
Fork並執行一個程序().這將被block直到程序執行完畢。最好避免執行例如內建命令以外的程序,它可能會導致init被阻塞不動。
export
設定全局環境變量的值,當這個命令執行後所有的進程都可以取得。
ifup
使網絡接口連線。
import
解析一個init配置文件,擴展當前配置文件。
hostname
設置主機名
chmod
改變文件訪問權限
chown
改變文件所屬和組
class_start
當指定類別的服務沒有運行,啟動該類別所有的服務。
class_stop
當指定類別的服務正在運行,停止該類別所有的服務。
domainname
設置域名。
insmod
加載該路徑的模塊
mkdir [mode] [owner] [group]
在創建一個目錄,可選選項:mod,owner,group.如果沒有指定,目錄以755權限,owner為root,group為root創建.
mount [ ]*
嘗試mount 到目錄. 可以用mtd@name格式以命名指定一個mtd塊設備。包含"ro","rw","remount","noatime".
setkey
暫時沒有
setprop
設置系統property 的值.
setrlimit
設置resource的rlimit.
start
啟動一個沒有運行的服務。
stop
停止一個正在運行的服務。
symlink
創建一個的符號鏈接到
sysclktz
設置系統時區(GMT為0)
trigger
觸發一個事件。用於調用其他action。
write [ ]*
打開的文件並寫入一個或多個字串。
Properties
----------
Init會更新一些系統property以提供查看它正在幹嘛。
init.action
當前正在執行的action,如果沒有則為""
init.command
被執行的命令,如果沒有則為""
init.svc.
命名為的服務的狀態("stopped", "running", "restarting")
init.rc 示例:
-----------------
# not complete -- just providing some examples of usage
#
on boot
export PATH /sbin:/system/sbin:/system/bin
export LD_LIBRARY_PATH /system/lib
mkdir /dev
mkdir /proc
mkdir /sys
mount tmpfs tmpfs /dev
mkdir /dev/pts
mkdir /dev/socket
mount devpts devpts /dev/pts
mount proc proc /proc
mount sysfs sysfs /sys
write /proc/cpu/alignment 4
ifup lo
hostname localhost
domainname localhost
mount yaffs2 mtd@system /system
mount yaffs2 mtd@userdata /data
import /system/etc/init.conf
class_start default
service adbd /sbin/adbd
user adb
group adb
service usbd /system/bin/usbd -r
user usbd
group usbd
socket usbd 666
service zygote /system/bin/app_process -Xzygote /system/bin --zygote
socket zygote 666
service runtime /system/bin/runtime
user system
group system
on device-added-/dev/compass
start akmd
on device-removed-/dev/compass
stop akmd
service akmd /sbin/akmd
disabled
user akmd
group akmd
調試
---------------
默認情況下,init執行的程序輸出的信息和錯誤到/dev/null.為了debug,你可以通過Android程序logwrapper執行你的程序。這將重定向輸出/錯誤輸出到Android logging系統(通過logcat訪問)。
例如
service akmd /system/bin/logwrapper /sbin/akmd
2010年3月24日 星期三
Python - subprocess 的用法
Reference address : http://docs.python.org/library/subprocess.html
import subprocess
p = subprocess.Popen(args, stderr=subprocess.PIPE)
p.communicate() <-加入這個function,可以等前面執行完成之後,才繼續往下走。
2010年3月22日 星期一
WinRats - 參數定義
series
定義:set start end = [function or value]
說明: 1.series name : 這個series的名字
2.start :開始(可省略)
3.end :結束(可省略)
4.function or value: 一開始時候的附值,可以接特定的function或是給予某一個值作為初始化。但是不可以省略
範例:
1. set x = 1
宣告一個series名字為x,大小則根據一開始All的宣告,並且每一個都填入1。
2. set y 1 200 = %NA
宣告一個series名字為y,大小為1~200,並且每一個都填入NA(空值)。
操作:
1.讀取一個名字叫做x的series中第三個值到變數temp:
computer temp = x(3)
2.將x的第四個值填入5
computer x(3) = 1
輸出:
print start end [serise name]
start 與 end可以省略用"/" 代替。series則可以輸入許多個。列印的時候就會依序排列輸出。
解說:
winrats中series是一個最基本也是最好用的變數型態。
這種變數型態相當有趣!一開始宣告,就會直接幫你在記憶體中製造一個類似矩陣又類似向量型態的變數。並且大小可以根據一開始all宣告的大小來附值。這種型態的變數,是winrats主要操作的變數型態。並且series在宣告的同時,就預設為real (類似c語言的浮點數float)。
2010年3月10日 星期三
ubuntu - 英文版開機自動執行ibus
英文版預設輸入法沒有安裝ibus。
當安裝好之後,也沒辦法自動執行。
這時候開啟命令列視窗,輸入:
sudo im-switch -s ibus
就可以開機自動執行ibus。
訂閱:
文章 (Atom)