使用 FreeTDS 存取 SQL Server

FreeTDS 是一個 Linux 函式庫,他重新實作了 TDS(Tabular Data Stream, 表列資料串流?) 協定,讓在 Linux 平台運行的程式也可以透過此函式庫存取支援 TDS 的 Sybase SQL 或是 MS SQL Server 資料庫。本篇文章針對如何使用 FreeTDS 存取 MS SQL 做簡易教學。 繼續閱讀

使用libmodbus實作Modbus協定

Modbus 是一個簡單且實用的工業用的網路協定,因為標準開放且容易實作,非常廣泛的應用於許多工業設備如PLC, AMI, … 等。Modbus協定目前由 Modbus Organization 維護,可以到該網站下載相關 specifications。Modbus 在 OSI 分層架構中屬於應用層,多數建構於串列傳輸 Serial (RS-232/RS-485) 或乙太網 (TCP/IP) 之上。(關於 Modbus 也可以參考小弟的拙於 slideshare) 即便 Modbus 協定相當容易實作,但基於"不要重新製造輪子"的立場,使用 libmodbus 函式庫來幫助我們快速開發,降低錯誤率與減少偵錯時間是個明智的選擇。

繼續閱讀

創建 Daemon 程式

Daemon 的原意其實就是小精靈(或是小惡魔),一般人是看不見的。而 Daemon 程式是指常駐在 Linux(或 Unix/Unix-Like)作業系統背景中執行的行程,無法被使用者直接操作或控制。這些 Daemon 可能是個 Server 在等待與處理 Client 端的請求,也可能是系統的維護程式。 繼續閱讀

實作 System V Shared Memory in Linux User Space

System V Shared Memory

在撰寫 process 時,有時會希望一些數值或是資料結構可以在不同 process 之間傳遞或是修改。但是資料結構儲存於虛擬記憶體中,不同 process 之間的記憶體區塊都是各自獨立的,無法存取到其他 process 的記憶體位置。如果要實現不同 process 之間存取相同一塊記憶體這樣的功能,就必須使用共享記憶體 (shared memory) 了。 繼續閱讀

實作 System V Semaphore in Linux User Space

System V Semaphore

在撰寫 Linux AP 時,System V semaphore 經常作為保護關鍵區域(critical section)或在不同 process 之間的同步(synchronization)之用。所謂 critical section 是指某程式碼段落對特定資源(可能是任何變數、檔案、驅動等等)做操作,而該資源若同時被不同程式(process)讀寫可能會有風險導致系統崩潰。好比 A process 正在寫入某 flash sector,此時 B process 正巧要讀取也要讀取同一個 flash sector,此時讀寫可能都會失敗,而導致系統不穩定。此類問題在多工作業系統中可能經常發生,因此需要使用一個機制來限制特定區域的存取。 繼續閱讀