• 沒有找到結果。

二. 相關研究與探討

2.5. Linux 平台上相關函式庫介紹

在 Linux 平台上,負責 GUI(Graphic User Interface) 的函式庫有 QT、GTK+等,

本研究採用 GTK+來開發 GUI 。另外,與 DRM Server 溝通的資料則是用 XML 格式來傳 遞。同時,實作程式裡也會利用 pthread 的 API 來處理平行執行某些動作,以下介紹 上述功能會用到的函式庫。

2.5.1. GTK+

Linux 平台的圖形介面是由 X Window 系統(也常被稱為 X11 或 X)來實現,其採 Client-Server 的架構來實現,由一個 X Server 與多個 X Client 進行溝通。其架構 如圖 3 所示,其中,每個 X Client 在實際上是一個應用程式。使用者透過鍵盤與滑鼠 或其它設備與 X Server 溝通,X Server 則將與 X Client 溝通的結果回傳到螢幕上讓 使用者可以知道操作的結果。

圖 5:Linux 平台的使用者介面架構[4]

大部分的 X Client,是藉由 Xlib 函式庫與 X Server 溝通。而 GTK+則是將 Xlib 所提供的 API 封裝而成的圖形介面軟體開發套件,GTK+與 Xlib 的關係,類似於 Microsoft Windows 上的 Win32 SDK 與 MFC 的關係。

12

圖 6:GTK+、XLib 與 X Client 的關係圖

GTK+(GIMP Tool Kit) [4]最初是 GIMP 專用的函式庫。後來發展為 Linux 系統下 開發圖形介面應用程式的主流開發工具之一。GTK+使用 C 語言開發,但是在程式裡,有 導入物件導向技術,如繼承的概念等。另外也提供了 gtkmm(GTK+ C++版)、Perl、Ruby、

Java 和 PyGTK( GTK+ Python 版)等語言綁定。

GTK+ 2.0 為 GTK+的後繼版本,除了保持 GTK+許多優秀的設計,還加入了許多的新 特性,如:更完善的支援 UTF-8 的 Unicode 與增加向量圖形的支持等。本研究中會使用 到的、與圖形介面有關的部分,即是使用 GTK+ 2.0 來開發。

2.5.2. XML 與 LibXML2

在本研究中,與 DRM Server 溝通時,從 DRM Server 回傳的資料,是以 XML 形式的 文件回傳,所以在此介紹 XML 與 LibXML2。

XML[3]為 Extensible Markup Language 的縮寫,中文翻譯為可擴展置標語言或可 擴展標記語言。XML 從 1995 年開始有雛形,在 1998 年二月發佈為 W3C[15]的標準。XML 的語法與 HTML 類似,是用標籤(tag)來定義元素(同樣也是用“<”與“>”來標示元素 名稱),不一樣的是,XML 可以擴展標籤。配合對應的程式,則可將 XML 文件轉換成不同 的文件格式。例如:Microsoft World 2007 的檔案格式即是利用 XML 定義,另外,Adobe 的 PDF 文件格式,也有利用到 XML。圖7為一個 XML 文件內容。

13

圖 7:一個 XML 文件

libXML2 是被提供用來分析 XML 文件的函式庫,使用 C 語言撰寫,屬於 Gnome Project 的一部分。透過 libXML2,可以將一份 XML 文件的內容以樹狀結構來表示,如 圖7的文件內容可以被解析成圖8的結構。

圖 8:XML 文件解析而成的樹狀結構

接著,可以透過 LibXML2 所提供的函式,找出我們需要的元素的名稱或屬性並取出 其值。

2.5.3. POSIX thread

在 Linux 平台上,要讓一個程式可以同時執行兩個以上的動作,可以利用 fork 或 pthread 來完成。前者是由目前的 process 再產生出一個 child process 來執行程式 動作,會佔用一個 process id ,而且所佔用的資源與 parent process 一樣多,如果

14

程式裡需要常常利用 fork 來產生 child process ,對系統的負擔會比較大。另外,

如果有共用資料的話,IPC( Inter-Process Communication )的問題也不容易解決。

Thread 使用起來,則是相對的對系統負擔較小(在 Solaris 2 上,產生一個 child process 比產生一個 thread 慢 30 倍,內容轉換(context switch)轉換大約慢 5 倍 [16]),而且資料可以共享,較無 IPC 的問題,不過不管是利用 fork 或是 pthread 來 使程式可以平行執行某些動作,對共享的資料的同步都需要另外注意。在本研究中,將 使用 pthread 來完成某些動作的平行處理。在此介紹 pthread 。

pthreads 是根據 POSIX(Portable Operating System Interface , IEEE 1003.1c) [17]標準定義 thread 產生與同步的 API[16]。但是 POSIX 只定義 thread 行為的規 格,並沒有實作,所以作業系統設計者可以用他們希望的方式來實作此規格。通常,

pthread 只有在 UNIX 或 Linux 系統上有被實作。Linux 的核心在 2.2 版引入

thread ,Linux 提供 fork 與 clone 這兩個 system call , clone 與 fork 類似,

不過它並不產生呼叫行程的拷貝,而是產生另一個 process 來分享 parent process 的 位址空間,它的行為與產生一個 thread 的行為類似,而 pthread 裡用來建立新的 thread 的函數 pthread_create 正是利用 clone 這個 system call 來實作。

2.5.4. 相關名詞解釋

mpg12play,後來改名為 “MPlayer – The movie Player”。

Mplayer 支援的格式眾多,除了內建支援大部分公開的影音格式以外,還可以透過 Mplayer 開發團隊所開發的 Win32 DLL Loader 來增加對 Microsoft 與其它公司所 提出來的影音格式的支援,後來較新的版本,也已經內建支援 Microsoft 的 wma、

wmv 等格式,而 wma 與 wmv 格式,正是本研究中所使用的多媒體講解呈現檔案裡,聲

15

(c) 部落格(blog)[3]:

是 web log 網路日誌的縮寫,是一種通當由一個人管理,定期張貼新文章、圖片或 影像的個人網站。

(d) SSD(Solid State Disk,固態硬碟)[3]:

一般來說,是用快閃記憶體來製作。是為了取代現有使用機械式馬達的硬碟,固態 硬碟的好處是設計上沒有用到機械式馬達與碟片,改為使快閃記憶體來製作。優點 是發熱量低,隨機讀取資料的速度快,但是缺點是寫入次數有限制,且寫入速度慢。

(e) Berkeley Sockets[4]:

Berkeley Sockets 是一個由 C 語言撰寫而成的 API ,功能是提供網路溝通的功能。

是由 UC Berkeley 所開發,一開始只用在 Unix 作業系統中。目前是在開發網路功 能中,最常被使用的 API。

(f) UUID(Universally Unique Identifier,通用唯一識別碼),節錄自[4]的描述:

UUID 的目的,是讓分散式系統中的所有元素,都能有唯一的辨識資訊,而不需要透 過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人衝突 的 UUID。在這樣的情況下,就不需考慮資料庫建立時的名稱重複問題。

(g) Gnash[3][27]:

被發展用來播放 Flash 的免費播放器或外掛程式,用來取代現有的 Adobe Flash Player。其優點是可以被編譯及執行在許多架構與平台上。

相關文件