在不學glib就對不起博主了!!

2021-06-01 00:49:13 字數 2257 閱讀 3348

標題是我自己加的,

gnome是基於gtk+開發的一套桌面環境,gnome和kde作為兩大最流行的桌面環境,在全世界廣泛使用。只要是在linux下工作的開發人員,對於gtk+一定不陌生。而對於glib,這個gtk+下的無名英雄,其功能強大卻鮮為人知。今天,在這裡簡要介紹一下,如果你是開發人員,看完本文,相信你會愛上它的。

glib不是gllibc,儘管兩者都是基於(l)gpl的開源軟體。但這一字之差卻誤之千里,glibc是gnu實現的一套標準c的庫函式,而glib是gtk+的一套函式庫。在linux平台上,像其它任何軟體一樣,glib依賴於glibc。

gobject是glib的精粹,glib是用c實現的,但在很大程式是基於物件導向思想設計的,gobject是所有類的基類。signal在其中也是一大特色,signal與作業系統中的signal並不一樣,它是類似訊息一樣的東西,讓訊息在各個物件間傳遞,但盡量降低物件間的耦合。仔細讀一下它的**,唯一想說的話就是「絕!」。

動態陣列、鍊錶、雜湊表等通用容器,在不同的公司,在不同的時期,在不同的情況下,我們每個人對每一種容器,可能都實現過n次以上。甚至在同乙個專案裡,出現幾份鍊錶的實現,也並非罕見。一直在抱怨,標準c中為什麼沒有類似於stl的標準容器,讓全世界的程式設計師在數以萬次的重複實現它們。不過,還算走運,有了glib,惡夢在此終結了。glib提供了動態陣列、單/雙向鍊錶、雜湊表、多叉樹、平衡二叉樹、字串等常用容器,完全是物件導向設計的,實現得非常精緻。不用白不用,別客氣了。

你開發過跨硬體平台的軟體嗎?是不是常常為硬體平台的差異而苦惱呢?位元組順序是常見的問題之一,大端格式,小端格式,還是pdp格式的?這樣差異造成的bug會浪費不少時間,同時讓**晦澀難讀。glib提供了一套完整的巨集,利用這些巨集編寫程式,問題大大簡化了。

你開發過跨作業系統的軟體嗎?在不同的平台下,很多函式有相同的功能,但函式原型,返回值差異巨大,也有的貌合神離,相同的名稱有著不同的意義,請看下面這張清單:

動態庫載入函式

執行緒函式

訊號量函式

互斥鎖函式

事件函式

字符集轉換函式

原子操作函式

建立程序函式

時間格式

io函式

為完成相同的功能,你卻要為此寫出不同的**。那怕只是乙個簡單的封裝,這麼多,你煩不煩?用glib吧,它的作者們都是高手中的高手,對不同的平台的理解程度,遠遠超出你和我,而且這些程式經過大量的應用程式測試,已經非常的穩定了,放心的用吧。

你寫過讀取配置檔案的模組吧,像讀取ini這樣簡單格式的檔案,當然不在話下,要讀markup語言格式的配置檔案,難度可能大了點,雖然不是不可能,但除非是為了學習,何必自己找麻煩呢。glib裡提供了詞法分析、markup語言解析、ini檔案訪問等功能,你完全不用為此擔憂。

不管是命令列程式,還是gui程式,或者後台服務程序,通過命令引數來控制程式的行為,都是開發人員慣用的手法。從命令列引數取到有用的資訊,不難,遍歷一遍不就行了嗎?但在每個程式中都來遍一次,你不覺得很單調嗎?我們的時間很寶貴,浪費時間做這種事情,不值得吧。glib的作者們早考慮到了,它提供了這樣的功能,你呼叫的它的函式,可能輕鬆的取得所要的命令列引數。

對於正規表示式,win32下的開發人員可能用得少一點,而在linux下的shell裡,它卻是不可或缺之物。有沒有想到在自己的程式中使用的它呢,在有的情況下,使用正規表示式,可能會大大降低開發的難度,提高易用性。glib也想到了這一點,它提供了簡單的正規表示式功能,當然,用與不用完全取決於你自己。

在程式裡,如果程式出錯了,特別是調了不該呼叫的函式,你是不是很想知道是誰調了它?大多數時候用debuger是最好的選擇,在某些情況下,沒有debuger可用,或者在debuger裡重現不了這個問題,你會不會覺得很無助?別怕,glib提供了一套跨平台的backtrace函式,有了它,你可以很容易找到元凶了。

產生質數的演算法不難,在我們的程式裡也像是星外來客,很少使用,常常忽略了它。所謂書到用時方恨少,有這樣的東東,說不定就有用得到它的時候。glib提供了這樣的功能,同時還提供了乙個較好的隨機數演算法。

linux shell裡的自動補完功能很好用吧,從linux轉移到win32下工作的開發人員,常常抱怨win32的shell裡沒有這個功能,其實win32下也是有的,把登錄檔裡的乙個選項開啟就行了。不管怎麼樣,總之這個功能太有用了,沒有它,你都會覺得少了點什麼,全身不自在,glib裡連這個功能都提供了,是不是很人性化呢?

記憶體問題!還是記憶體問題!如果你沒有為記憶體問題而苦惱過,我都懷疑你是不是乙個真正的c語言程式設計師。記憶體洩露、訪問越界、空指標、野指標和記憶體優化等問題,是不是都曾讓你夜不能昧?有些工具可以幫助你,但這不是萬能的良藥,好好寫你的程式才是第一要義。glib提供了一些的手段,也可以在一定程度上減輕你的痛苦。

在windows下編譯glib庫

glib庫是跨平台的c語言函式庫,是gtk 庫和gnome的基礎。glib可以在多個平台下使用,比如linux unix windows等。glib為許多標準的 常用的c語言結構提供了相應的替代物。ps d glib 2.64.2 meson build prefix c binary ps d g...

那些在我周遭的人,對不起

今天天氣不好,陰沉沉的,就像是我的心情,比較陰鬱。坐在操場邊的觀眾席上,看著天空,很模糊,很灰色,很高,很遠。跑道上人來人往,足球場上人聲嘈雜,我就坐在這裡,不理不睬,獨自的思考。曾幾何時,我發現自己的周圍的朋友很少,已經是少的可憐了。那些我認識的,我了解了的人,都被我無情的貼上了無知無能世俗的標籤...

錯就錯在立志學黑客

錯就錯在立志學黑客 錯就錯在立志學黑客,學什麼不好,非要搞黑?學電腦沒錯,學硬體沒錯,學軟體也沒錯,圖形美工更沒錯 錯就錯在學黑客 黑客?傳說中的計算機行業的最精之英了 那意味著什麼?意味著放棄 從電子網路專業到偷偷學習黑客,已經兩年整了,其中辛酸愁苦只有個人知曉。1。至少精通2個作業系統 從win...