Lua-In-Xcode & lua-environment

Lua-In-Xcodehtml

前言

Lua 應用場景

  • 遊戲開發
  • 獨立應用腳本
  • Web 應用腳本
  • 擴展和數據庫插件如:MySQL Proxy 和 MySQL WorkBench
  • 安全系統,如入侵檢測系統

lua-environment

  • Mac 上也能夠經過 homebrew 安裝,便於版本管理。
brew install lua

若是已經安裝了5.3.0,在採用ios

brew install lua
的時候,就會報錯:git

Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/lua
Target /usr/local/bin/lua
already exists. You may want to remove it:
  rm '/usr/local/bin/lua'

To force the link and overwrite all conflicting files:
  brew link --overwrite lua

To list all files that would be deleted:
  brew link --overwrite --dry-run lua
devzkndeMacBook-Pro:luatest devzkn$ brew link --overwrite --dry-run lua
Would remove:
/usr/local/bin/lua
/usr/local/bin/luac
/usr/local/include/lauxlib.h
/usr/local/include/lua.h
/usr/local/include/lua.hpp
/usr/local/include/luaconf.h
/usr/local/include/lualib.h
devzkndeMacBook-Pro:luatest devzkn$ brew link --overwrite lua
Linking /usr/local/Cellar/lua/5.2.4_5... 71 symlinks created
devzkndeMacBook-Pro:luatest devzkn$ lua -v
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
devzkndeMacBook-Pro:luatest devzkn$ brew install lua
Updating Homebrew...
Warning: lua 5.2.4_5 is already installed
  • 本身下載安裝
devzkndeMacBook-Pro:ios-Reverse_Engineering devzkn$ curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  271k  100  271k    0     0  73274      0  0:00:03  0:00:03 --:--:-- 73324
devzkndeMacBook-Pro:ios-Reverse_Engineering devzkn$ ls -lrt
total 99520
-rw-r--r--   1 devzkn  staff    278045 Jan  6  2015 lua-5.3.0.tar.gz
devzkndeMacBook-Pro:ios-Reverse_Engineering devzkn$ tar zxf lua-5.3.0.tar.gz
devzkndeMacBook-Pro:ios-Reverse_Engineering devzkn$ ls -lrt
total 99520
drwxr-xr-x   6 devzkn  staff       192 Jan  6  2015 lua-5.3.0
devzkndeMacBook-Pro:lua-5.3.0 devzkn$ make macosx test
cd src && /Applications/Xcode.app/Contents/Developer/usr/bin/make macosx
/Applications/Xcode.app/Contents/Developer/usr/bin/make all SYSCFLAGS="-DLUA_USE_MACOSX" SYSLIBS="-lreadline" CC=cc
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lapi.o lapi.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lcode.o lcode.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lctype.o lctype.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o ldebug.o ldebug.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o ldo.o ldo.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o ldump.o ldump.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lfunc.o lfunc.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lgc.o lgc.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o llex.o llex.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lmem.o lmem.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lobject.o lobject.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lopcodes.o lopcodes.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lparser.o lparser.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lstate.o lstate.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lstring.o lstring.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o ltable.o ltable.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o ltm.o ltm.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lundump.o lundump.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lvm.o lvm.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lzio.o lzio.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lauxlib.o lauxlib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lbaselib.o lbaselib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lbitlib.o lbitlib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lcorolib.o lcorolib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o ldblib.o ldblib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o liolib.o liolib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lmathlib.o lmathlib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o loslib.o loslib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lstrlib.o lstrlib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o ltablib.o ltablib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lutf8lib.o lutf8lib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o loadlib.o loadlib.c
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o linit.o linit.c
ar rcu liblua.a lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o lmathlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o loadlib.o linit.o 
ranlib liblua.a
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o lua.o lua.c
cc -o lua   lua.o liblua.a -lm -lreadline 
cc -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_MACOSX    -c -o luac.o luac.c
cc -o luac   luac.o liblua.a -lm -lreadline 
src/lua -v
Lua 5.3.0  Copyright (C) 1994-2015 Lua.org, PUC-Rio
devzkndeMacBook-Pro:lua-5.3.0 devzkn$ sudo  make install
Password:
cd src && mkdir -p /usr/local/bin /usr/local/include /usr/local/lib /usr/local/man/man1 /usr/local/share/lua/5.3 /usr/local/lib/lua/5.3
cd src && install -p -m 0755 lua luac /usr/local/bin
cd src && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h lua.hpp /usr/local/include
cd src && install -p -m 0644 liblua.a /usr/local/lib
cd doc && install -p -m 0644 lua.1 luac.1 /usr/local/man/man1
devzkndeMacBook-Pro:lua-5.3.0 devzkn$ lua -v
Lua 5.3.0  Copyright (C) 1994-2015 Lua.org, PUC-Rio
  • 測試HelloWorld
devzkndeMacBook-Pro:luatest devzkn$ touch HelloWorld.lua 
devzkndeMacBook-Pro:luatest devzkn$ open 
devzkndeMacBook-Pro:luatest devzkn$ vi  HelloWorld.lua 
devzkndeMacBook-Pro:luatest devzkn$ cat  HelloWorld.lua 
print("Hello World!");
devzkndeMacBook-Pro:luatest devzkn$ lua  HelloWorld.lua 
Hello World!
devzkndeMacBook-Pro:luatest devzkn$

下載xclangspec文件(Add-Lua.sh, Lua.xclangspec)

下載https://github.com/breinhart/...
確認 Xcode 處於關閉狀態github

  • 切換對應的Xcode
devzkndeMacBook-Pro:Lua-In-Xcode-master devzkn$ sudo xcode-select -s /Applications/Xcode.app
  • 進入Lua-In-Xcode-master目錄執行命令'sudo ./Add-Lua.sh'

輸入密碼數據庫

  • 從新打開 Xcode ,並打開你的lua文件 選擇功能表上的Editor->Syntax Coloring -> Lua 完成!

交互式編程

devzkndeMacBook-Pro:luatest devzkn$ lua 
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> print("Hello World!")
Hello World!

腳本式編程

devzkndeMacBook-Pro:luatest devzkn$ lua HelloWorld.lua 
Hello World!
  • 將代碼修改成以下形式來執行腳本

在開頭添加:#!/usr/local/bin/lua
指定了 Lua 的解釋器爲 /usr/local/bin directory。加上 # 號標記解釋器會忽略它。接下來咱們爲腳本添加可執行權限
相似與#!/bin/bash 用法。macos

devzkndeMacBook-Pro:luatest devzkn$ cat *
#!/usr/local/bin/lua
print("Hello World!");
devzkndeMacBook-Pro:luatest devzkn$ chmod +x *
devzkndeMacBook-Pro:luatest devzkn$ ls -lrt
total 8
-rwxr-xr-x  1 devzkn  staff  45 Dec  4 18:19 HelloWorld.lua
devzkndeMacBook-Pro:luatest devzkn$ HelloWorld.lua
Hello World!

註釋

--[=[註釋內容]=]
--[[
 多行註釋
 多行註釋
 --]]

Lua 文件 I/O

打開文件操做語句以下:編程

file = io.open (filename [, mode])
  • mode 的值有:
r    以只讀方式打開文件,該文件必須存在。
w    打開只寫文件,若文件存在則文件長度清爲0,即該文件內容會消失。若文件不存在則創建該文件。
a    以附加的方式打開只寫文件。若文件不存在,則會創建該文件,若是文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。(EOF符保留)
r+    以可讀寫方式打開文件,該文件必須存在。
w+    打開可讀寫文件,若文件存在則文件長度清爲零,即該文件內容會消失。若文件不存在則創建該文件。
a+    與a相似,但此文件可讀可寫
b    二進制模式,若是文件是二進制文件,能夠加上b
+    號表示對文件既能夠讀也能夠寫
file = io.open("/var/root/lualog.text", "a")
        -- 設置默認輸出文件爲 test.lua
        io.output(file)
        io.write("--  test.lua 文件末尾註釋")
        file:close()
  • 例子:處理http 請求timeout的狀況
local res, code, response_headers = http.request{  
        url = http_url,  
        method = "POST",  
        headers =  
        {  
            ["Content-Type"] = content_type;  
            ["Content-Length"] = #http_body;  
        },  
        source = ltn12.source.string(http_body),  
        sink = ltn12.sink.table(response_body),  
    }
    decode3 = {};
    --notifyMessage("res is:"..res);
    sysLog("《httpPost end 》");
    if(not(res == nil)) then
        sysLog("res:"..res);
        
    else
    --code: timeout
    res= "";
    sysLog("code: "..code);
    
    --輸出返回的信息到特定文件
    
    -- 以附加的方式打開只寫文件
    file = io.open("/var/root/lualog.text", "a")
    -- 在文件最後一行添加 Lua 註釋
    -- 設置默認輸出文件爲 test.lua
    io.output(file)
    
    if type(response_body) == "table" then
        file:write("--res:"..res.." code:"..code.." response_body:"..table.concat(response_body).."\n")
        else
        file:write("--res:"..res.." code:"..code.." response_body[1]:"..type(response_body).."\n")
    end
    
    -- 關閉打開的文件
    file:close()

    return res,code,decode3
    
    end
  • 記錄信息
iPhone:~ root# cat lualog.text 
--res: code:timeout response_body:
--res: code:closed response_body:
--res: code:timeout response_body:
-rw-r--r-- 1 root wheel   104 Dec  6 13:30 lualog.text
/var/root
  • 新增時間格式
file:write("--time:"..getTime.."res:"..res.." code:"..code.." response_body:"..table.concat(response_body).."\n")
--time:Wed Dec  6 14:16:30 2017res: code:timeout response_body:

知識補充

local getTime = os.date("%c");
%a    abbreviated weekday name (e.g., Wed)
%A    full weekday name (e.g., Wednesday)
%b    abbreviated month name (e.g., Sep)
%B    full month name (e.g., September)
%c    date and time (e.g., 09/16/98 23:48:10)
%d    day of the month (16) [01-31]
%H    hour, using a 24-hour clock (23) [00-23]
%I    hour, using a 12-hour clock (11) [01-12]
%M    minute (48) [00-59]
%m    month (09) [01-12]
%p    either 「am」 or 「pm」 (pm)
%S    second (10) [00-61]
%w    weekday (3) [0-6 = Sunday-Saturday]
%x    date (e.g., 09/16/98)
%X    time (e.g., 23:48:10)
%Y    full year (1998)
%y    two-digit year (98) [00-99]
%%    the character ‘%’
  • 如獲取當前年月日時分秒
local date=os.date(「%Y-%m-%d %H:%M:%S」);

os.time()--獲取當前秒
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息