悶頭看的東西不寫出來總感覺遲早要忘記,那就通過部落格的形式一點一點記錄下來吧,沒準回頭來看會有更多收穫。
新工作的第一天就被告知要先維護乙個cgi,**用lua寫的,lua是神馬,能吃嗎\摳鼻子。零零散散看了兩三天,今天終於有那麼一點點眉目了。
首先,執行乙個lua檔案命令是:lua 檔名.lua
前面的lua程式是乙個直譯器,用c來寫的,原始碼裡的函式乍一看好簡單:
int main (int argc, char **argv)
/* call 'pmain' in protected mode */
lua_pushcfunction(l, &pmain);
lua_pushinteger(l, argc); /* 1st argument */
lua_pushlightuserdata(l, argv); /* 2nd argument */
status = lua_pcall(l, 2, 1, 0);
result = lua_toboolean(l, -1); /* get result */
finalreport(l, status);
lua_close(l);
return (result && status == lua_ok) ? exit_success : exit_failure;
}今天白天試了一下用c語言寫乙個程式,程式中呼叫lua指令碼,晚上看到這個原始碼我就樂了,什麼嘛,在c裡面調實際就是把lua程式的**搬到自己**裡去實現。
再來看乙個我覺得很驚豔的程式:luac -l -l 檔名.lua
通過這個命令,可以看到一些像彙編一樣的東西,如下:
$ luac -l -l exelua.lua
main (3 instructions, 12 bytes at 0x1b9b530)
0+ params, 2 slots, 0 upvalues, 0 locals, 1 constant, 1 function
1 [4] closure 0 0 ; 0x1b9b710
2 [1] setglobal 0 -1 ; fun1
3 [4] return 0 1
constants (1) for 0x1b9b530:
1 "fun1"
locals (0) for 0x1b9b530:
upvalues (0) for 0x1b9b530:
function (7 instructions, 28 bytes at 0x1b9b710)
2 params, 4 slots, 0 upvalues, 2 locals, 1 constant, 0 functions
1 [2] getglobal 2 -1 ; print
2 [2] move 3 0
3 [2] call 2 2 1
4 [3] getglobal 2 -1 ; print
5 [3] move 3 1
6 [3] call 2 2 1
7 [4] return 0 1
constants (1) for 0x1b9b710:
1 "print"
locals (2) for 0x1b9b710:
0 a 1 7
1 b 1 7
upvalues (0) for 0x1b9b710:
總結出來的規律是,以函式為單位,lua檔案裡沒有寫主函式,但在這裡是可以看到主函式的,估計就是從這裡入手的。
今天在嘗試在c裡調lua函式的時候遇到了幾個坑
1、gcc的時候有幾個必須用到的庫,liblua.a, libm.a, libld.a
2、還有三個要用的標頭檔案#include "lua.h", #include "lualib.h", #include "lauxlib.h"。注意檔案路徑,小心找不著啊~
明天得研究下lua.c和一些標準庫函式。撤~
圈圈 測試 環境 零星記錄01
1 vc6 程式設計 從這裡進 我是傳送到 桌面快捷方式的 點選 lanuch program 進去 這樣 有一些ddk的環境變數 就自己設定好了,不用人為再次設定 2 進去之後,是這樣 2.1 主要是 工程建立之後,再次開啟的話,不要使用 選單欄 driverwizard load project...
android 零星知識點記錄
一 在按鈕上顯示影象的方式有哪些?解析 本題考查了應聘者對按鈕的靈活應用程度。button是textview 的子類,因此,button與textview一樣,也可以實現 混排效果。除了button之外,android sdk 提供了乙個專門顯示影象的按鈕元件imagebutton.anrdoid ...
原創 Beego一些零星的記錄
和之前一樣的風格,比較亂,隨想隨記,見諒!1 首先上來乙個問題,bee run之後報錯!rm rf beego 此處是刪掉go get的beego,待會用git clone乙個下來。不放心的亦可重新命名,備份一下 git clone b master2 connect to the redis ho...