當前位置:首頁 » 編程軟體 » glib編程

glib編程

發布時間: 2022-09-25 20:08:17

『壹』 如何使用glib工具集管理c數據

首先研究 GLib 的范疇。

GLib 是一個提供了很多實用定義和函數的底層程序庫,包括基本類型及其限定的定義、標准宏、類型轉化、位元組次序、內存分配、警告與斷言、消息日誌、計時器、 字元工具、鉤子函數、詞法掃描器、模塊的動態載入,以及自動的字元串補齊。

GLib 還定義了很多數據結構(以及它們相關的操作),包括:

* 內存塊(Memory chunks)
* 雙向鏈表(Doubly-linked lists)
* 單向鏈表(Singly-linked lists)
* 散列表(Hash tables)
* 字元串(Strings,可以動態增長)
* 字元塊(String chunks,成組的字元串)
* 數組(Arrays,當增加元素時其大小能夠增長)
* 平衡二叉樹(Balanced binary trees)
* N-叉樹(N-ary trees)
* Quarks(字元串和唯一整型標識符的雙向關聯)
* 有關鍵字的數據列表(Keyed data lists,通過字元串或者整型 id 訪問其數據元素的列表)
* 關系(Relations)和元組(tuples)(可以由任意數目的域進行索引的數據表)
* 緩存

每個程序都必須管理數據

編寫程序是為了處理數據。程序可能會從文件中讀出一個名字列表、通過一個圖形 用戶界面向用戶詢問某些數據,或者從一個外部的硬體設備載入數據。但數據一旦 到了程序中,就需要保持對它的追蹤。用來管理數據的函數和變數稱為 數據結構 或 容器。

如果使用 C 編寫代碼,那麼您會發現它極其缺乏復雜的數據結構。當然,有很多存 儲數據的簡單方法:

* 基本類型 —— int、float、char 等等。
* 枚舉(enum),可以保存整數的一系列符號名稱。
* 數組(array),這是 C 中最靈活的數據結構。

數組可以保存基本類型的數據,或者一系列任意類型的數據,或者指向任意類型數 據的指針。

但是數組也有很多局限性。它們的大小不能改變,所以,如果為一個擁有十個元素 的數組分配了內存,卻發現需要向其中放置十一個元素,那麼就得創建一個新數組 ,將舊的元素拷貝過來,然後添加並新的元素。如果要遍歷數組中的每一個元素, 那麼,或者需要始終知道數組中有多少個元素,或者要確保在數組的末尾處有某種 「數組結束」標記,以使得您能夠知道何時停止。

通過使用鏈表和二叉樹等標准容器,在 C 中保持對數據的追蹤的問題已經多次得到 解決。每一位剛開始學習計算機科學專業的學生都會使用一個數據結構類;教師肯 定會布置一系列編寫那些容器的實現的練習。在編寫這些數據結構時,學生會意識 到它們是多麼難以處理;粗心的學生經常會犯諸如懸空指針(dangling pointer) 和重復 釋放內存(free) 的錯誤。

編寫單元測試會有很大幫助,但是,總的來說,為每個新程序重新編寫相同的數據 結構是一個費力不討好的任務。

內置的數據結構

簡言之就是,在什麼地方內置數據結構會有所幫助。有一些語言會內置附帶這些容 器。C++ 包含標准模板庫(Standard Template Library,STL),它有一個容器類 工具集,比如列表、優先隊列、集合(set)和映射。另外,這些容器是 類型-安全 (type-safe) 的,也就是說,您只能向創建的每一個容器對象中放入一種類型的 元素。這就使得它們的使用更為安全,並避免了 C 所要求的很多冗長的強制類型轉 換。並且,STL 包含了很多遍歷工具和排序工具,這樣就使得容器的使用更為簡單 。

java 編程環境也附帶了一組容器類。The java.util 程序包包含 ArrayList、 Ha shMap、TreeSet 以及其他各種標准結構。它還包括有用於對數據進行一般排序、創 建不變集合的工具,以及其他各種便利工具。

不過,C 並沒有內置容器支持;您或者只能自己編寫,或者使用其他人的數據結構 程序庫。

幸運的是,GLib 是一個能夠滿足此需要的優秀的、免費的、開放源代碼的程序庫。 它包含了大部分標准數據結構,以及在程序中有效處理數據的很多實用工具。它誕 生於 1996 年,從而經過了徹底地測試,並在發展過程中增加了很多實用功能。

100 字以內(或者更少)的演算法分析

對容器的不同操作需要不同長度的時間。例如,在一個長的列表中,訪問第一個元 素要快於對同一列表進行排序。用來描述完成這些操作所需時間的符號稱為 O-not ation。這個話題需要計算機科學專業的學生用一個學期的時間去研究,但是,簡要 地講,O-notation 是對操作的最壞情況的分析。換句話說,它對完成某個操作所需 要的 最長 時間進行度量。它被證明是度量數據結構操作的有效途徑,因為經常會 遇到最壞情況的操作(比如當您搜索某個列表而卻沒有找到所找查找的條目時)。

接下來論述了一些 O-notation 示例,可以將一副撲克牌在桌子上排列一行:

* O(1) —— 選擇第一張牌。 O(1) 也稱為「線性時間(constant time)」, 因為不管在列表中有多少張牌,取得第一張牌的時間都是相同的。
* O(n) —— 翻轉每一張牌。O(n) 被稱為「線性時間(linear time)」,因 為隨著牌的數目增加,完成操作所需時間線性增加。
* O(n!) —— 創建一個全部撲克牌所有可能排列的列表。每向列表添加一張新 牌,排列的數目都會階乘式增加。

您會發現,在整個教程都提及關於不同數據結構操作的 O-notation。了解特定數據 結構上特定操作的開銷,能夠幫助您更明智地選擇容器在,最優化應用程序的性能。

編譯 GLib 程序

如果在研究那些示例時編譯並運行它們,那麼您將通過本文學到更多。由於它們要 使用 GLib,所以編譯器需要知道 GLib 頭文件和程序庫在哪裡,以使其能夠解析 GLib 定義的類型。這個簡單的程序初始化一個雙向鏈表並向其中添加一個字元串:

代碼:
//ex-compile.c
#include <glib.h>
int main(int argc, char** argv) {

GList* list = NULL;

list = g_list_append(list, "Hello world!");
g_printf("The first item is '%s'\n", g_list_first(list)->data);

return 0;
}

可以通過調用 GCC 來編譯這個程序,如下:

代碼:
$ gcc -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0 -o ex-compile ex-compile.c

運行它,查看期望的輸出:

代碼:
$ ./ex-compile
The first item is 'Hello world!'
$

不過,那是一個非常難用的 GCC 調用。更簡單的方式是讓 GCC 指向 GLib 程序庫 。

使用 pkg-config

手工指定程序庫的位置容易出錯而且很冗長,所以大部分現代的 linux 發行版本都 附帶了 pkgconfig 工具來幫助簡化此問題。可以使用 pkgconfig 來編譯上面的程 序,如下:

代碼:
$ gcc `pkg-config --cflags --libs glib-2.0` -o ex-compile ex-compile.c

輸出與先前相同:

代碼:
$ ./ex-compile
The first item is 'Hello world!'
$

注意,現在不必再指定 GLib 頭文件的路徑;pkgconfig 的 --cflags 選項會完成 此任務。使用 --libs 選項指定的程序庫也是如此。當然,沒有任何神密之處;pk gconfig 只是通過一個配置文件讀取出程序庫和頭文件的位置。在 Fedora Core 3 系統中,pkgconfig 文件位於 /usr/lib/pkgconfig 目錄下, glib-2.0.pc 文件 類似如下:

代碼:
$ cat /usr/lib/pkgconfig/glib-2.0.pc
prefix=/usr
exec_prefix=/usr
libdir=/usr/lib
includedir=/usr/include

glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums

Name: GLib
Description: C Utility Library
Version: 2.4.7
Libs: -L${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include

這樣,所有信息都由一個中間層隱藏起來。如果恰巧使用了一個不支持 pkgconfig 的 Linux 發行版本,那麼隨時可以重新直接為 GCC 指定頭文件和程序庫。

GLib 的現實應用

僅僅列舉出 GLib 容器並展示示例用法可能還不夠,所以本教程還包含了 GLib 在 一些開放源代碼的應用程序中的現實應用:

* Gaim 是一款流行的實時消息客戶機,它在 SourceForge 上的下載次數每個 月都會超過二十五次。
* GIMP(Graphical Image Manipulation Program)是 GLib 本身的出發點( starting point);它是一款廣為應用的圖像處理程序,從 1996 年開始一直得到 公眾的共同開發。
* Evolution 是一款極好的個人信息管理器(PIM),可以追蹤電子郵件、聯系 人、任務和約會。

研究 GLib 在這些流行的應用程序中的應用還會讓您有機會了解一些編碼習慣;不 僅能知道函數的名字是什麼,您還能夠了解通常如何使用它們。您將會熟悉將要使 用的容器,而且甚至會注意到在某些情況下有人選擇了並不最適於某任務的容器。

GLib 還擁有很多約定(conventions)及工具宏。在學習本教程的過程中,您將發 現使用並解釋了其中的很多。不必嘗試一開始就將它們完全記住,而只需要在進行 過程中去學習它們,在示例中去了解它們。

『貳』 如何用c語言編程將命令行指定的一個文件的內容追加到另一個文件的末

我不清楚你在用什麼平台,但凡是涉及跨進程的東西,都要直接或間接用到操作系統的系統調用.比如在Linux下,支持命令行的程序,可以在C程序中以system()函數或execv()函數進行調用,需包含unistd.h.如果是在用glib庫,可以用dbus來實現進程間通信.windows編程我沒學過,但機制應該類似.另外如果你的程序比較復雜,還要仔細考慮創建新進程後的管理.建議參考下windows下相應系統編程的書.

『叄』 gtk圖形界面編程有什麼參考文獻

GTK(GIMP Toolkit)是一個圖形用戶編程的介面。它完全免費,所以用來開發自由軟體或商業軟體都不需要花費什麼。現在很多Linux集成系統都已經將GTK1.2版本打包進去了。包括RedHat Linux 6.0以上版本,還有中文化的Turbo Linux等等。它也越來越被普遍的應用於UNIX系統編程。
還有一個組件叫Glib,它包含了一些標准應用的新擴展用來提高GTK的兼容性。用於Linux系統的某些函數可能不適合標準的UNIX系統,例如g_strerror()函數等等。某些函數也擴展了GNUC的一般功能,例如g_malloc函數就有自己加強的調試功能。
GTK可以與多種語言綁定,包括C++, Guile, Perl, Python, Ton, Ada95, Objective C, Free Pascal, Eiffel。

『肆』 linux下c++編程 GBKTOUTF8問題

GLIB_INCLUDES=`pkg-config --cflags glib-2.0 gthread-2.0`
GLIB_LIBS=`pkg-config --libs glib-2.0 gthread-2.0`

/*
* writed by kf701
*/

#include <stdio.h>
#include <glib.h>

int main(int argch,char *argv[])
{
GError * ge = NULL;

char inbuf[20*1024];
FILE *in = fopen(argv[1],"r");
int size = fread( inbuf, 1, sizeof(inbuf), in );
printf( "file size = %d\n", size );

int outlen = 0, readlen = 0;
char *out = g_convert( inbuf, size, "UTF-8", "GBK", &readlen, &outlen, &ge );

printf( "convert outlen=%d , readlen = %d\n", outlen, readlen );

if( NULL == out )
{
printf("out is NULL,err=%s\n", ge->message);
exit(0);
}
char output_file[128];
sprintf( output_file, "utf8-%s", argv[1] );

FILE *of = fopen( output_file, "w" );
int n = fwrite( out, 1, outlen, of );
printf( "fwrite n = %d\n", n);
}

調用一下glib庫.就好了

『伍』 C做嵌入式開發

你應該從以下方向去學習:
一、工具的使用

1、學會使用vim/emacs,vim/emacs是linux下最常用的源碼編輯具,不光要學會用它們編輯源碼,還要學會用它們進行查找、定位、替換等。新手的話推薦使用vim,這也是我目前使用的文本編輯器。

2、學會makefile文件的編寫規則,並結合使用工具aclocal、autoconf和automake生成makefile文件。

3、掌握gcc和gdb的基本用法。掌握gcc的用法對於構建一個軟體包很有益處,當軟體包包含的文件比較多的時候,你還能用gcc把它手動編譯出來,你就會對軟體包中各個文件間的依賴關系有一個清晰的了解。

4、掌握svn/cvs的基本用法。這是linux,也是開源社區最常用的版本管理系統。可以去試著參加sourceforge上的一些開源項目。

二、linux/unix系統調用與標准C庫

系統調用應用軟體與操作系統的介面,其重要性自然不用說,一定要掌握。推薦學習資料為steven先生的UNIX環境高級編程(簡稱APUE)。

三、庫的學習

無論是在哪個平台做軟體開發,對於庫的學習都很重要,linux下的開發庫很多,我主要介紹一下我常常用到的一些庫。

1、glib庫

glib 庫是gtk+和gnome的基礎庫,並具是跨平台的,在linux、unix和windows下都可以用。glib庫對於linux平台開發的影響就像 MFC對windows平台開發的影響一樣,很多開源項目都大量的使用了glib庫,包括gimp、gnome、gaim、evolution和 linux下的集群軟體heartbeat.因為glib庫自帶有基本的數據結構實現,所以在學習glib庫的時候可以順便學習一下基本的數據結構(包括鏈表、樹、隊列和hash表)。

2、libxml庫

libxml是linux平台下解析XML文件的一個基礎庫,現在很多實用軟體都用XML格式的配置文件,所以也有必要學習一下。

3、readline庫

readline 庫是bash shell用的庫,如果要開發命令行程序,那麼使用readline庫可以減少很多工作量,比如bash里的命令行自動補全,在readline里就已經有實現,當然你也可以用自己的實現替代庫的行為。readline庫有很多網站介紹的,只要google一下readline就可以找到一堆了。

4、curses庫

curses 庫以前是vi程序的一部分,後來從vi里提取出來成為一個獨立的庫。curses庫對於編寫終端相關的程序特別有用,比如要在終端某一行某一列定位輸出,改變終端字體的顏色和終端模式。linux下的curses庫用的是GNU實現的ncurses(new curses的意思)。

5、gtk+和KDE庫

這兩個庫是開發GUI應用程序的基礎庫,現在linux下的大部份GUI程序都是基於這兩個庫開發的,對於它們 的學習也是很有必要的。

四、網路的學習

網路這個東西太寬了,推薦學習資料steven先生的UNIX網路編程(簡稱UNP)和TCP/IP協議詳解,更進一步的話可以學習使用libnet編寫網路程序。

『陸』 linux下編程 error: 『dev_t』 undeclared (first use in this function)

頭文件名寫的沒錯。
但是此文件不是/usr/include裡面的,而是在kernel源代碼目錄下。

『柒』 LINUX系統介紹

嵌入式Linux系統的設計與應用
摘要:隨著嵌入式Linux系統的迅速發展,嵌入式Linux已發展成為嵌入式操作系統的一個重要分支。本文介紹了嵌入式Linux的設計和幾種流行的嵌入式Linux系統。

關鍵詞:嵌入式Linux

一、引言

嵌入式系統(Embedded Systems)是根據應用的要求,將操作系統和功能軟體集成於計算機硬體系統之中,從而實現軟體與硬體一體化的計算機系統。嵌入式系統出現於60年代晚期,它最初被用於控制機電電話交換機,如今已被廣泛的應用於工業製造、過程式控制制、通訊、儀器、儀表、汽車、船舶、航空、航天、軍事裝備、消費類產品等眾多領域。嵌入式系統在數量上遠遠超過了各種通用計算機系統:計算機系統核心CPU,每年在全球范圍內的產量大概在二十億顆左右,其中超過80%應用於各類專用性很強的嵌入式系統。

一般的說,凡是帶有微處理器的專用軟硬體系統都可以稱為嵌入式系統。和通用的計算平台相比,嵌入式系統往往具有功能單一、體積小、功耗低、可靠性高、剪裁性好、軟硬體集成度高、計算能力相對較低等特點。多年來,嵌入式設備中沒有操作系統,其主要原因有二:首先,諸如洗衣機、微波爐、電冰箱這樣的設備僅僅需要一道簡單的控製程序,以管理數量有限的按鈕和指示燈,沒有使用操作系統的必要;其次,它往往只具有有限的硬體資源,不足以支持一個操作系統。

然而,隨著硬體的發展,嵌入式系統變得越來越復雜,最初的控製程序中逐步的加入了許多功能,而這些功能中有很多可以由操作系統提供。於是,在70年代末期出現了嵌入式操作系統(Embedded Operating Systems),它的出現大大簡化了應用程序設計,並可以有效的保障軟體質量和縮短開發周期。簡單的ES一般並不使用操作系統,只包含一些控制流程,但是隨著嵌入式操作系統在復雜性上的增長,簡單的流程式控制制就不能滿足系統的要求,這是就必須考慮使用操作系統做系統軟體。因此,嵌入式操作系統就應運而生。

隨著EOS的廣泛應用,業界已推出一些應用比較成功的EOS產品。歸納起來EOS應該具有以下幾個特點:小巧、實時性、可裝卸、固化代碼、弱交互性、強穩定性和統一的介面。目前使用最多的EOS產品包括有:Vxwork、QNX、PalmOS、WindowsCE、pSOS、Hopen OS(國內凱思集團公司自主研製開發)等。其中,Vxwork使用最為廣泛、市場佔有率最高,其突出特點是實時性強(採用優先順序搶占和輪轉調度等機制),除此之外,其可靠性和可剪裁性也相當不錯。QNX是一種伸縮性極佳的系統,其核心加上實時POSIX環境和一個完整的窗口系統還不到一兆。相比之下,Microsoft WinCE的核心體積龐大,實時性能也差強人意,但由於Windows系列友好的用戶界面和為程序員所熟悉的API,並捆綁IE、Office等應用程序,正逐漸獲得更大的市場份額。而與這些商業化的操作系統相比,Linux已經越來越受到人們的注意。

二、嵌入式Linux概述

Linux是一個成熟而穩定的網路操作系統。將Linux植入嵌入式設備具有眾多的優點。首先,Linux的源代碼是開放的,任何人都可以獲取並修改,用之開發自己的產品。其次,Lirmx是可以定製的,其系統內核最小隻有約134kB。一個帶有中文系統和圖形用戶界面的核心程序也可以做到不足1MB,並且同樣穩定。另外,它和多數Unix系統兼容,應用程序的開發和移植相當容易。同時,由於具有良好的可移植性,人們已成功使Linux運行於數百種硬體平台之上。

然而,Linux並非專門為實時性應用而設計,因此如果想在對實時性要求較高的嵌入式系統中運行Linux,就必須為之添加實時軟體模塊。這些模塊運行的內核空間正是操作系統實現進程調度、中斷處理和程序執行的部分,因此錯誤的代碼可能會破壞操作系統,進而影響整個系統的可靠性和穩定性。Linux的眾多優點還是使它在嵌入式領域獲得了廣泛的應用,並出現了數量可觀的嵌入式Linux系統。其中有代表性的包括:uClinux、ETLinux、ThinLinux、LOAF等。ETLinux通常用於在小型工業計算機,尤其是PC/104模塊。ThinLinux面向專用的照相機伺服器、X-10控制器、MP3播放器和其它類似的嵌入式應用。LOAF是Linux On A Floppy的縮略語,它運行在386平台上。

三、Linux作為嵌入式操作系統的優勢

Linux作為嵌入式操作系統的優勢主要有以下幾點:

1、 可應用於多種硬體平台。Linux已經被移植到多種硬體平台,這對於經費,時間受限制的研究與開發項目是很有吸引力的。原型可以在標准平台上開發後移植到具體的硬體上,加快了軟體與硬體的開發過程。Linux採用一個統一的框架對硬體進行管理,從一個硬體平台到另一個硬體平台的改動與上層應用無關。Linux可以隨意地配置,不需要任何的許可證或商家的合作關系,源代碼可以免費得到。這使得採用Linux作為操作系統不會遇到任何關於版權的糾紛。毫無疑問,這會節省大量的開發費用。本身內置網路支持,而目前嵌入式系統對網路支持要求越來越高。Linux的高度模塊化使添加部件非常容易。

2、 Linux是一個和Unix相似、以內核為基礎的、具有完全的內存訪問控制,支持大量硬體(包括X86,Alpha、ARM和Motorola等現有的大部分晶元)等特性的一種通用操作系統。其程序源碼全部公開,任何人可以修改並在GUN通用公共許可證(GNU General Public License)下發行。這樣,開發人員可以對操作系統進行定製,適應其特殊需要。

3、 Linux帶有Unix用戶熟悉的完善的開發工具,幾乎所有的Unix系統的應用軟體都已移植到了Linux上。Linux還提供了強大的網路功能,有多種可選擇窗口管理器(X Windows)。其強大的語言編譯器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。

四、嵌入式Linux的建立

完整的嵌入式Linux解決方案應包括嵌入式Linux操作系統內核、運行環境、圖形化界面和應用軟體等。由於嵌入式設備的特殊要求,嵌入式Linux解決方案中的內核、環境、GUI等都與標准Linux有很大不同,其主要挑戰是如何在狹小的FLASH、ROM和內存中實現高質量的任務實時調度、圖形化顯示、網路通信等功能。

1、 精簡內核

Linux內核有自己的結構體系,其中進程管理、內存管理和文件系統是其最基本的3個子系統。圖1簡單表示了它的框架。用戶進程可直接通過系統調用或者函數庫來訪問內核資源。正因為Linux內核具有這樣的結構,因此修改內核時必須注意各個子系統之間的協調。

嵌入式Linux內核一般由標准Linux內核裁剪而來。用戶可根據需求配置系統,剔除不需的服務功能、文件系統和設備驅動。經過裁剪、壓縮後的系統內核一般只有300k左右,十分適合嵌入式設備。同標准Linux不同的是嵌入式Linux必須要實現從FLASH或ROM的啟動。標准Linux啟動代碼實現了系統初始化和從軟盤、硬碟O盤區引導內核。嵌入式Linux一般保存在FLASH或ROM中,標准LILO無法引導。在支持直接從FLASH設備引導的系統中,如華恆公司的uClinux,引導程序主要完成對硬體系統的初始化工作和操作系統的解壓、移位工作。在不支持直接從FLASH引導的系統中,FLASH設備只能作為非引導磁碟使用。此時,可採用先從硬碟或軟盤載入一個小操作系統,如嵌入式DOS,然後再執行"Loadlin"載入程序從FLASH引導嵌入式Linux。

對標准Linux的修改主要是虛擬內存和調度程序部分的改動。因為標准Linux系統使用虛擬內存管理的目的是為了能同時運行多個進程,但是這樣每個待運行的進程所能分配的CPU時間片就受限制,資源的使用效率就低。這樣對於實時性要求較高的嵌入式系統來說,實時任務往往要求CPU具有很高的突發處理能力,即在有些時候需要極高的處理效率,因此需要屏蔽內核的虛擬內存管理機制。對於無硬碟設備的嵌入式系統,不必採用虛存管理。強實時需求的嵌入式應用可以通過修改任務調度模塊實現,主要是在內核和設備驅動程序中加入了許多切換點。在該點處,系統檢測是否存在未處理的緊急中斷,有則剝奪內核的運行,及時處理中斷。實現實時性服務的一個較好的方法是在標準的Linux內核上增加一個實時內核,標准Linux內核作為一個任務運行於實時內核上,強實時性任務也直接運行在實時內核上,如RT-Linux等。

文件系統是嵌入式Linux操作系統必不可少的。但標准Linux支持大量的文件系統,因此除了滿足系統的正常運行需要而保留一種外,其它的全部可以刪除,利用原有的設置選項可以移除。一般嵌入式設備文件系統主要使用RamDisk技術和網路文件系統技術。RamDisk可駐留於Flash,運行時載入到內存中。

2、 精簡運行環境

Linux通常的運行環境指用戶運行任何應用的基礎設施,主要包括函數庫和基本命令集等。標准Linux系統同時向用戶提供了靜態和動態函數庫。靜態函數庫在生成應用時直接鏈接到用戶應用中。動態庫在應用運行時才鏈接。由於嵌入式系統應用一般都是在開發平台上預先生成的,因此嵌入式系統只需向應用提供動態函數庫。Linux應用運行所需的函數庫主要有C庫、數學庫、線程庫、加密庫、網路通信庫等。其中最基本的是C語言的運行庫glib。這個庫主要完成基本的輸入輸出,內存訪問,文件處理。一個標準的glib庫大約要1200kB存儲空間,考慮到嵌入式Linux內核往往很小,這種運行庫實在太大,我們做了一些精簡的工作,方法有兩種:(1)、使用靜態連接的方法,完全不使用運行庫動態連接;(2)、對這個庫的函數進行精簡。

在一個桌面系統上,使用動態連接可以帶來許多好處。使用動態連接庫,可以讓應用程序跟函數庫的更新、升級分離,便於維護,可以讓同時運行的多個程序共享一段代碼。但是,在嵌入式系統中,很少有多個程序並行的可能,程序的維護,尤其是庫函數的維護更新是不常見的。這時,使用靜態連接的優勢就極為明顯。因為靜態連接可以只將庫中用到的部分連接進程序。在應用程序較少(小於5)的情況下,靜態連接可以達到較好的結果。為了便於將來擴充的需要,我們也採用第二種方法,針對我們的需要,對庫函數的內容進行精簡,只保留一些基本功能,還有一種方法是採用其它的C語言運行庫。但是這些庫對兼容性影響很大。

基本命令集同樣是運行用戶應用的基礎,主要包括初始化進程init,終端獲取getty、Shell和基本命令等。嵌入式系統的啟動過程可能與標准Linux不同,例如跳過登錄過程直接啟動GUI等。這就要求修改init,getty等。標准Linux命令集同樣由於體積問題無法直接應用於嵌入式環境。目前,小命令集的解決方法主要有集成方法和匯編方法兩種。集成方法採用集成公共部分減少命令集整體體積,用C實現,有較好的平台移植性;匯編方法則採用匯編編程減少每個命令的體積.這樣可使體積很小但其平台移植性較差。

3、 嵌入式Linux下的GUI

GUI在嵌入式系統或者實時系統中的地位越來越重要,比如PDA、DVD播放機、WAP手機等,都需要一個完整.漂亮的圖形用戶界面。這些系統對GUI的基本要求包括:(1)、輕型、佔用資源少;(2)、高性能;(3)、高可靠性;(4)、可配置。這些也成為評價嵌入式系統的重要指標。目前,嵌入式Linux上的GUI主要有winCE、Micro Window、緊縮的X Window、MiniGUI(國內做得較好的自由軟體之一)。標准Linux的Xfree86由於體積龐大,運行環境要求高,無法運行於嵌入式環境。嵌入式GUI主要通過削減功能,降低性能來實現體積小和佔用資源少。目前嵌入式Linux上的GUI環境主要有兩類:X類和win32類。X類GUI分為服務方和客戶方兩方。伺服器方提供滑鼠、鍵盤處理和顯示功能,客戶方是用戶應用,服務方和客戶方通過socket介面和X協議通信。採用該方式十分有利於遠程網路圖形化服務,客戶方和服務方可通過網路實現X協議和圖形顯示。典型的X類GUI有Micro Window、緊縮的X Window等。win32類的GUI不存在客戶方和服務方,每個任務都自成一體,任何任務間的切換、事件分發由專門的管理任務負責。如wiCE、MiniGUI就是類似於win32類的GUI。

五、當前流行的幾種嵌入式Linux系統

除了智能數字終端領域以外,Linux在移動計算平台、智能工業控制、金融業終端系統,甚至軍事領域都有著廣泛的應用前景。這些Linux被統稱為"嵌入式Linux"。

1、RT-Linux

這是由美國墨西哥理工學院開發的嵌入式Linux操作系統。到目前為止,RT-Linux已經成功地應用於太空梭的空間數據採集、科學儀器測控和電影特技圖像處理等廣泛領域。RT-Linux開發者並沒有針對實時操作系統的特性而重寫Linux的內核,因為這樣做的工作量非常大,而且要保證兼容性也非常困難。為此,RT-Linux提出了精巧的內核,並把標準的Linux核心作為實時核心的一個進程,同用戶的實時進程一起調度。這樣對Linux內核的改動非常小,並且充分利用了Linux下現有的豐富的軟體資源。

2、uClinux

uCLinux是Lineo公司的主打產品,同時也是開放源碼的嵌入式Linux的典範之作。uCLinux主要是針對目標處理器沒有存儲管理單元MMU(Memory Management Unit) 的嵌入式系統而設計的。它已經被成功地移植到了很多平台上。由於沒有MMU,其多任務的實現需要一定技巧。uCLinux是一種優秀的嵌入式Linux版本,是micro-Conrol-Linux的縮寫。它秉承了標准Linux的優良特性,經過各方面的小型化改造,形成了一個高度優化的、代碼緊湊的嵌入式Linux。雖然它的體積很小,卻仍然保留了Linux的大多數的優點:穩定、良好的移植性、優秀的網路功能、對各種文件系統完備的支持和標准豐富的API。它專為嵌入式系統做了許多小型化的工作,目前已支持多款CPU。其編譯後目標文件可控制在幾百KB數量級,並已經被成功地移植到很多平台上。

3、Embedix

Embedix是由嵌入式Linux行業主要廠商之一Luneo推出的,是根據嵌入式應用系統的特點重新設計的Linux發行版本。Embedix提供了超過25種的Linux系統服務,包括Web伺服器等。系統需要最小8MB內存,3MB ROM或快速快閃記憶體。Embedix基於Linux 2.2內核,並已經成功地移植到了Intel x86和PowerPC處理器系列上。像其它的Linux版本一樣,Embedix可以免費獲得。Luneo還發布了另一個重要的軟體產品,它可以讓在Windows CE上運行的程序能夠在Embedix上運行。Luneo還將計劃推出Embedix的開發調試工具包、基於圖形界面的瀏覽器等。可以說,Embedix是一種完整的嵌入式Linux解決方案。

4、Xlinux

XLinux是由美國網虎公司推出,主要開發者是陳盈豪。他在加盟網虎幾個月後便開發出了基於XLinux的、號稱是世界上最小的嵌入式Linux系統,內核只有143KB,而且還在不斷減小。XLinux核心採用了"超字元集"專利技術,讓Linux核心不僅可能與標准字元集相容,還含蓋了1 2個國家和地區的字元集。因此,XLinux在推廣Linux的國際應用方面有獨特的優勢。

5、PoketLinux

由Agenda公司採用、作為其新產品"VR3PDA"的嵌入式Linux操作系統。它可以提供跨操作系統構造統一的、標准化的和開放的信息通信基礎結構,在此結構上實現端到端方案的完整平台。PoketLinux資源框架開放,使普通的軟體結構可以為所有用戶提供一致的服務。PoketLinux平台使用戶的視線從設備、平台和網路上移開,由此引發了信息技術新時代的產生。在PoketLinux中,稱之為用戶化信息交換(CIE),也就是提供和訪問為每個用戶需求而定製的"主題"信息的能力,而不管正在使用的設備是什麼。

6、MidoriLinux

由Transmeta公司推出的MidoriLinux操作系統代碼開放,在GUN普通公共許可(GPL)下發布,可以在http://midori.transmeta.com上立即獲得。該公司有個名為"MidoriLinux計劃"。"MidoriLinux"這個名字來源於日本的"綠色"---Midori,用來反映其Linux操作系統的環保外觀。

7、紅旗嵌入式Linux

由北京中科院紅旗軟體公司推出的嵌入式Linux是國內做得較好的一款嵌入式操作系統。目前,中科院計算所自行開發的開放源碼的嵌入式操作系統---Easy Embedded OS(EEOS)也已經開始進入實用階段了。該款嵌入式操作系統重點支持p-Java。系統目標一方面是小型化,另一方面能重用Linux的驅動和其它模塊。由於有中科院計算所的強大科研力量做後盾,EEOS有望發展成為功能完善、穩定、可靠的國產嵌入式操作系統平台。

六、結束語

由於Linux是一個內核源代碼開放、具備一整套工具鏈、有強大的網路支持及成本低廉的操作系統,因此嵌入式Linux自誕生起就秉承了這眾多獨特優勢,這使它正在並越來越多地受到人們的關注。據Even Data數據顯示,期望使用嵌入式Linux的用戶從2001年的11%增到2002年27%,而同期Vxwork只是從16%到18%,Win CE從9%到14%。另外,在嵌入式Linux的各種應用市場中,通信(語音和數據)名列第一,2000年的銷售額是1300萬美元,而2005年預計將達到1.26億美元,可以預見,嵌入式Linux將在未來的通信用嵌入式操作系統中占據強有力的地位

Linux是目前十分火爆的操作系統。它是由芬蘭赫爾辛基大學的一個大學生Linus B. Torvolds在1991年首次編寫的。標志性圖標是一個可愛的小企鵝。

Linux是一種類Unix系統,Linus當時編寫它的目的是為了替代一種名叫Minix的操作系統。Minix是由一個名叫Andrew Tannebaum的計算機教授編寫的,當時由於Unix是一個商業軟體,其源代碼是不能拿來進行教學的,Andrew教授就自己編寫了一個系統用於教學。最
初的Minix用一張軟盤就能裝下,麻雀雖小、五臟俱全,Minix具有一般操作系統的特徵,它同時兼容Unix系統。

Linux是一個免費的操作系統,用戶可以免費獲得其源代碼,並能夠隨意修改。它是在共用許可證GPL(General Public License)保護下的自由軟體,也有好幾種版本,如Red Hat Linux、Slackware,以及國內的Xteam Linux等。

Linux具有許多Unix系統的功能和特點,能夠兼容Unix,但無需支付Unix高額的費用。比如一個Unix程序員在單位可以在Unix系統上進行工作,回到家裡在Linux系統上也能完成同樣的工作,而不必重新購買Unix。要知道Unix的價格比常見的Windows要高出若干倍,和Linux的低廉更是相距甚遠。

Linux的應用也十分廣泛。Sony最新的PS2游戲機就採用了Linux作為系統軟體,使PS2搖身一變,成為了一台Linux工作站。著名的電影《泰坦尼克號》的數字技術合成工作就是利用100多台Linux伺服器來完成的。

2001年8月17日,Linux發布了最新的Linux 2.4.9版,它也已經十歲了。

Linux的優點

Linux的流行是因為它具有許多誘人之處。

1、完全免費

Linux是一款免費的操作系統,用戶可以通過網路或其他途徑免費獲得,並可以任意修改其源代碼。這是其他的操作系統所做不到的。正是由於這一點,來自全世界的無數程序員參與了Linux的修改、編寫工作,程序員可以根據自己的興趣和靈感對其進行改變。這讓Linux吸收了無數程序員的精華,不斷壯大。

2、完全兼容POSIX 1.0標准

這使得可以在Linux下通過相應的模擬器運行常見的DOS、Windows的程序。這為用戶從Windows轉到Linux奠定了基礎。許多用戶在考慮使用Linux時,就想到以前在Windows下常見的程序是否能正常運行,這一點就消除了他們的疑慮。

3、多用戶、多任務

Linux支持多用戶,各個用戶對於自己的文件設備有自己特殊的權利,保證了各用戶之間互不影響。多任務則是現在電腦最主要的一個特點,Linux可以使多個程序同時並獨立地運行。

4、良好的界面

Linux同時具有字元界面和圖形界面。在字元界面用戶可以通過鍵盤輸入相應的指令來進行操作。它同時也提供了類似Windows圖形界面的X-Windows系統,用戶可以使用滑鼠對其進行操作。在X-Windows環境中就和在Windows中相似,可以說是一個Linux版的Windows。

5、豐富的網路功能

互聯網是在Unix的基礎上繁榮起來的,Linux的網路功能當然不會遜色。它的網路功能和其內核緊密相連,在這方面Linux要優於其他操作系統。在Linux中,用戶可以輕松實現網頁瀏覽、文件傳輸、遠程登陸等網路工作。並且可以作為伺服器提供WWW、FTP、E-Mail等服務。

6、可靠的安全、穩定性能

Linux採取了許多安全技術措施,其中有對讀、寫進行許可權控制、審計跟蹤、核心授權等技術,這些都為安全提供了保障。Linux由於需要應用到網路伺服器,這對穩定性也有比較高的要求,實際上Linux在這方面也十分出色。

7、支持多種平台

Linux可以運行在多種硬體平台上,如具有x86、680x0、SPARC、Alpha等處理器的平台。此外Linux還是一種嵌入式操作系統,可以運行在掌上電腦、機頂盒或游戲機上。2001年1月份發布的Linux 2.4版內核已經能夠完全支持Intel 64位晶元架構。同時Linux也支持多處理器技術。多個處理器同時工作,使系統性能大大提高。

Linux的不足

由於在現在的個人電腦操作系統行業中,微軟的Windows系統仍然佔有大部分的份額,絕大多數的軟體公司都支持Windows。這使得Windows上的應用軟體應有盡有,而其他的操作系統就要少一些。許多用戶在換操作系統的時候都會考慮以前的軟體能否繼續使用,換了操作系統後是否會不方便。雖然Linux具有DOS、Windows模擬器,可以運行一些Windows程序,但Windows系統極其復雜,模擬器所模擬的運行環境不可能完全與真實的Windows環境一模一樣,這就使得一些軟體無法正常運行。

許多硬體設備面對Linux的驅動程序也不足,不少硬體廠商是在推出Windows版本的驅動程序後才編寫Linux版的。但一些大硬體廠商在這方面做得還不錯,他們的Linux版驅動程序一般都推出得比較及時。

軟體支持的不足是Linux最大的缺憾,但隨著Linux的發展,越來越多的軟體廠商會支持Linux,它應用的范圍也越來越廣。這只小企鵝的前景是十分光明的。

『捌』 c語言編程以一定的軟體打開一個特定的文件

我不清楚你在用什麼平台,但凡是涉及跨進程的東西,都要直接或間接用到操作系統的系統調用.
比如在Linux下,支持命令行的程序,可以在C程序中以system()函數或execv()函數進行調用,需包含unistd.h . 如果是在用glib庫,可以用dbus來實現進程間通信. windows編程我沒學過,但機制應該類似.另外如果你的程序比較復雜,還要仔細考慮創建新進程後的管理. 建議參考下windows下相應系統編程的書.

『玖』 如何在sentox中安裝glib庫

apt-get install build-essential #這將安裝gcc/g++/gdb/make 等基本編程工具

apt-get install gnome-core-devel #這將安裝 libgtk2.0-dev libglib2.0-dev 等開發相關的庫文件

apt-get install pkg-config #用於在編譯GTK程序時自動找出頭文件及庫文件位置

apt-get install devhelp #這將安裝 devhelp GTK文檔查看程序

apt-get install libglib2.0-doc libgtk2.0-doc #這將安裝 gtk/glib 的API參考手冊及其它幫助文檔

apt-get install glade libglade2-dev #這將安裝基於GTK的界面GTK是開發Gnome窗口的c/c++語言圖形庫。

apt-get install libgtk2.0*, gtk+2.0所需的所有文件統通下載安裝完畢。

應用程序編譯命令:gcc test.c `pkg-config --cflags --libs gtk+-2.0`,編譯通過,運行正常。

熱點內容
解壓到當前文件夾右鍵 發布:2024-04-26 03:57:08 瀏覽:979
html5android教程視頻下載 發布:2024-04-26 03:09:59 瀏覽:867
伺服器的描述是什麼 發布:2024-04-26 03:08:32 瀏覽:394
個人加密 發布:2024-04-26 03:01:23 瀏覽:521
linuxusbgadget 發布:2024-04-26 02:52:54 瀏覽:304
我的世界空島世界伺服器地址 發布:2024-04-26 01:39:08 瀏覽:248
尼爾機械紀元加密 發布:2024-04-26 01:37:11 瀏覽:868
在控制台輸出sql語句 發布:2024-04-26 01:08:12 瀏覽:432
動畫java 發布:2024-04-26 01:02:40 瀏覽:12
得力文件夾5302 發布:2024-04-26 00:21:32 瀏覽:91