0%

Lua

io.popen v.s. io.execute

io.popen (prog [, mode])

  • This function is system dependent and is not available on all platforms.
  • Starts program prog in a separated process
  • returns a file handle that you can use to read data from this program (if mode is “r”, the default) or to write data to this program (if mode is “w”).
  • 如果失敗會直接中斷 program
    閱讀全文 »

Man Page

introduction

  • 手冊頁(英語:Manual pages,縮寫man page)是在Unix或類Unix作業系統線上軟體文件的一種普遍的形式
    閱讀全文 »

Domain/IP 介紹

domain introduction

  • 網域 = 網域名稱 = 域名
  • 方便人們記憶
  • DNS(Domain Name System)就被發展出來,做為將網域名稱與 IP 位址互相對映的分散式資料庫
  • 網域通常都是是由右至左解讀:
    • 從網址最末端的 “.” (dot = zoot zone) 開始,但通常都不會顯示
    • 再來是「頂級網域」,通常是 “.com” , “.net”, “gov” 結尾
    • 接著是你註冊的「根網域」,在上圖的例子中 websiteurl.com 就是根網域
  • 在根網域之前,全部都可以稱為 「子網域」,可以隨意的命名,各階層上限是 63 個字元,總長度不超過 253 個字元即可

閱讀全文 »

Linux uid

  • RUID, EUID,SUID來表示實際用戶ID,有效用戶ID,設置用戶ID
    閱讀全文 »

extern “C”

introduction

  • extern “C” makes a function-name in C++ have C linkage (compiler does not mangle the name) so that client C code can link to (use) your function using a C compatible header file that contains just the declaration of your function.
    閱讀全文 »

Application Binary Interface (ABI)

  • 應用程式二進位制介面,描述了應用程式和作業系統之間,一個應用和它的庫之間,或應用的組成部分之間的底層介面。
  • 想要保持二進位制相容相較於API相容來說要難上許多,並且影響ABI相容的因素也非常多從硬體到作業系統再到編譯器,程式語言等,並且非常難以統一
  • ABI 更改是不可避免的。發生這種情況時,除非重新編譯以使用新版本的庫,否則使用該庫的任何程序都將無法運行。如果 ABI 更改但 API 沒有更改,則新舊庫版本有時稱為“源兼容”。這意味著雖然為一個庫版本編譯的程序不能與另一個庫版本一起使用,但如果重新編譯,為一個庫版本編寫的源代碼將適用於另一個庫版本。
    閱讀全文 »

Linux dd Command

introduction

  • convert and copy a file (Copy a file, converting and formatting according to the operands.)
  • 該名稱來自數據複製器 (data duplicator),但幽默地說它也意味著磁盤破壞者或數據破壞者 (data destroyer),因為它是一個非常強大的工具
  • 用途
    • 硬碟讀寫效能測試
    • 備份與回復整顆硬碟的資料。
    • 備份與回復原始設備檔案,例如 MBR(master boot record)。
    • 轉換資料格式,例如 ASCII 轉換為 EBCDIC,大小寫轉換等。
    • 建立固定大小的檔案。
      閱讀全文 »

decltype

introduction

  • C++11 引入的 decltype
  • 傳入一個型別、值或運算式(expression)給 decltype 即可獲得該傳入的東西其型別為何
  • decltype 最管用的地方大概是 function templates,利用給定的函數參數推導出回傳型別
    閱讀全文 »

epoll, poll, select

select - 時間複雜度O(n)

  • int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
    • select 可監視 writefd, readfd, 及 exceptfd。呼叫 select 後,該 process 會被 blocked,直到某個 fd ready 或是 timeout。當 select return 後,必須要 traverse 所有 fdset,來找到 ready 的 fd。
  • select 在所有平台都支援,缺點是監視的 fd 有數量上限,通常是 1024,但可修改 macro 或是重新編譯 kernel 增加這個上限。
  • 32位機預設是1024個。64位機預設是2048.
閱讀全文 »

IO model

introduction

Kernal Space, User Space

  • 作業系統的核心是核心,獨立於普通的應用程式,可以訪問受保護的記憶體空間,也有訪問底層硬體裝置的所有許可權。為了保證使用者程式不能直接操作核心(kernel),保證核心的安全
  • CPU 執行程式時,會在 user space 與 kernel space 之間來回切換,user space 的系統函式庫,會轉換為 kernel space 的 system call,並由 kernel 處理,當 system call 完成後,就會回到 user space 繼續下去。
  • 32 bits 的 OS,定址空間是 2^32 也就是 4G。kernel space 限制為 1G (虛擬地址0xC0000000到0xFFFFFFFF),而 user space 為 3G (虛擬地址0x00000000到0xBFFFFFFF),由各 process 使用。
  • 64 bits 的 OS,會將 virtual address 分成一半,第一個 bit 為 0 是 user space,第一個 bit 為 1 是 kernel space,理論上是 8EB+8EB。但目前 processors 只實作了 48 bits,也就是 128TB+128TB。
    閱讀全文 »