Time of Update: 2018-12-06
最近重裝了電腦,一開始時裝了個最新版的Ubuntu12.04,發現unity介面真心不好用(不習慣),轉回gnome介面又實在太醜了,於是想到了Linux Mint這個發行版本,裝了最新版的Mint13,用了一會,感覺不錯,給人一陣清新的感覺,案頭與windows比較類似,更重要的是Linux
Time of Update: 2018-12-06
一. 概述 系統調用是應用程式與核心互動的一種方式。系統調用作為一種介面,通過系統調用,應用程式能夠進入作業系統核心,從而使用核心提供的各種資源,比如操作硬體,開關中斷,改變特權模式等等。首先,系統調用是一個非強制中斷,既然是中斷那麼一般就具有中斷號和中斷處理常式兩個屬性,Linux使用0x80號中斷作為系統調用的入口,而中斷處理常式的地址放在中斷向量表裡。 二. 過程 基於linux-2.6.38,以read()系統調用函數為例進行說明。
Time of Update: 2018-12-06
在很多應用中都需要應用程式主動去查詢驅動中是否有資料可讀或者是否可以向驅動寫入資料,對於單線程的應用,這可能會導致進程阻塞。當然,可以使用select來不斷輪詢驅動是否可讀或可寫,但是這並不是很好的解決方案,更好的解決方式是由驅動主動通知應用程式其狀態,而不是應用程式主動去查詢驅動的狀態。
Time of Update: 2018-12-06
在前三篇裡學習了Linux平台裝置和驅動的一些知識後,這篇就說一下驅動程式是怎麼自動產生裝置檔案。 寫過Linux驅動的可能都知道,Linux裡有一類裝置叫做混雜裝置,而且還可以發現註冊這一類裝置後是不用手動去產生裝置檔案的。好吧,由這類裝置的註冊函數入手,從而去瞭解是怎樣自動產生裝置檔案的。看看混雜裝置註冊函數在/drivers/char/misc.c裡的定義: 1 int misc_register(struct miscdevice * misc) 2 {
Time of Update: 2018-12-06
一、概述 Linux網路裝置驅動程式遵循通用的介面,設計時採用的是物件導向的方法,一個裝置就是一個對象(net_device結構)。一個網路裝置最基本的方法有初始化、發送和接收等。
Time of Update: 2018-12-06
或許習慣於用進階語言編程的大部分同學都會忽略了函數調用的具體過程是怎樣的,如果想知道這個過程就不得不從彙編入手,但組合語言又晦澀難懂。在這裡謹以一個簡單的例子說說我對函數調用過程的學習心得。 先上C語言寫的代碼: 1 #include<stdio.h> 2 3 4 unsigned int test(int a,int b) 5 { 6 int c,d; 7 c = a; 8 d = b; 9 return c;10 }
Time of Update: 2018-12-06
最近需要用到網路編程中的廣播程式,在網上找了下,親測可用。用戶端: 1 #include <stdio.h> 2 #include <arpa/inet.h> 3 #include <string.h> 4 #include <sys/ioctl.h> 5 #include <net/if.h> 6 #include <unistd.h> 7 8 9 int main(void)10 {11
Time of Update: 2018-12-06
在/etc目錄下,做如下操作: (1)cd /etc vi exports /home *(sync,rw,no_root_squash) /opt *(sync,rw,no_root_squash) (2)重啟nfs service nfs restart 注意:防火牆的設定。如出現System Error: No route to
Time of Update: 2018-12-06
source命令用法:source FileName作用:在當前bash環境下讀取並執行FileName中的命令。註:該命令通常用命令“.”來替代。使用範例:source filename 或 . filename(中間有空格) source命令(從 C Shell 而來)是bash shell的內建命令。source命令也稱為“點命令”,也就是一個點符號(.);點命令,就是個點符號(.),(從Bourne Shell而來)是source的另一名稱。Source命令主要於運行指令碼。
Time of Update: 2018-12-06
使用文法:export [-p][變數名稱]=[變數設定值] 參數說明: [-p] 列出所有的shell賦予程式的環境變數。 命令功能:顯示或設定環境變數。 使用範例: export PATH=/mnt/updata/mips-4.3/bin:$PATH #這句話是設定系統變數,後面的":$PATH"是在系統變數後面增加一項。 export
Time of Update: 2018-12-06
這裡說的是在VMware虛擬機器下來實現在windows與Linux下共用一個檔案夾。下面來說明一下是如何?的:1.安裝VMware.Workstation.2.安裝Fedora10。3.完成前兩步後,開啟VMware->工具列—>虛擬機器->選擇 安裝Vmware工具.4. 開啟VMware->工具列—>虛擬機器—>可行動裝置—>CD-ROM—>設定—>使用ISO鏡像檔案(選擇vmware安裝目錄中linux.iso)5. mkdir
Time of Update: 2018-12-06
1、將檔案checkout到本地目錄svn checkout path(path是伺服器上的目錄) 例如:svn checkout svn://192.168.1.1/pro/domain 簡寫:svn co2、往版本庫中添加新的檔案 svn add file 例如:svn add test.php(添加test.php) svn add *.php(添加目前的目錄下所有的php檔案)3、將改動的檔案提交到版本庫 svn commit -m "LogMessage"
Time of Update: 2018-12-06
groups 查看當前登入使用者的組內成員groups gliethttp 查看gliethttp使用者所在的組,以及組內成員whoami 查看當前登入使用者名稱/etc/group檔案包含所有組/etc/shadow和/etc/passwd系統存在的所有使用者名稱1、/etc/group
Time of Update: 2018-12-06
編譯:第一步、是進行先行編譯,使用-E參數可以讓GCC在預先處理結束後停止編譯過程:gcc -E hello.c -o hello.i預先處理的宏定義插入到hello.i中第二步、是將hello.i編譯為目標代碼,這可以通過使用-c參數來完成:gcc -c hello.i -o hello.o也可以通過源檔案直接產生gcc -c hello.c第三步、是將產生的目標檔案連結成可執行檔:gcc hello.o -o hello也可以通過源檔案直接產生gcc -o hello hello.c警告:1
Time of Update: 2018-12-06
1,inode中儲存喲普檔案內容的塊號碼,Linux核心進行讀寫操作時,會根據inode中的盤塊號碼來操作相應的盤塊,完成對檔案的讀寫。mv命令用於移動一個檔案,即使要移動的檔案很大,其移動速度也很快,原因是mv命令沒有移動檔案內容而是改變了檔案的目錄項。該命令在新的目錄下建立一個新的目錄項,並將其指向原來的檔案即可。2,Linux環境使用Link函數建立一個永久連結,其函數原型:int link(const char *path1,const char*path2),第一個參數是現有檔案名稱,
Time of Update: 2018-12-06
進程一旦調用了wait,就立即阻塞自己,由wait自動分析是否當前進程的某個子進程已經退出,如果讓它找到了這樣一個已經變成殭屍的子進程,wait 就會收集這個子進程的資訊, 並把它徹底銷毀後返回;如果沒有找到這樣一個子進程,wait就會一直阻塞在這裡,直到有一個出現為止。如果該進程沒有子進程,則立即出錯返回,傳回值為-1(注意,是wait()函數立即返回,而不是說該父進程也跟著結束了,父進程裡該語句後的內容還是要照樣接著執行的)wait(等待子進程中斷或結束)相關函數
Time of Update: 2018-12-06
虛擬記憶體---linux作業系統採用虛擬記憶體管理技術,使得每個進程都有獨立的進程地址空間,該空間是大小為3G,使用者看到和接觸的都是虛擬位址,無法看到實際的物理地址。利用這種虛擬位址不但能起到保護作業系統的作用,而且更重要的是使用者程式可使用比實際實體記憶體更大的地址空間。 linux將4G的虛擬位址空間劃分為兩個部分------使用者空間和核心空間。使用者空間從0----0xbfffffff,核心空間從3G----4G。使用者進程通常情況下只能訪問使用者空間的虛擬位址,不能訪問核心空間。例
Time of Update: 2018-12-06
Socket中的send函數可以發送字串,但不能直接發送結構體,因此在發送端先把結構體轉成字串,然後用send發送,在接收端recv字串,再轉換成原先的結構體,這個就是解決問題的主要思路,實現中要注意的問題在下文闡述。 為了用戶端之間能夠互相通訊,實現私聊,我採用伺服器轉寄的方式,因此使用者發送的每條訊息中除了訊息主體外,還必須包含有寄件者、接收者ID等資訊,如此採用結構體便是最佳的辦法了。我定義的結構體如下:struct send_info{char info_from[20];
Time of Update: 2018-12-06
伺服器端: #include<stdio.h> #include<stdlib.h> #include<sys/socket.h> #include<arpa/inet.h> #include<string.h> #include<errno.h> #include<unistd.h> #define BUFSIZE 1024 int main(void)
Time of Update: 2018-12-06
linux 裡的eclips本身就可以編譯C/C++這讓我感到十分欣慰,^_^。 可是編寫好OpenGL程式後確不能編譯,報錯:.....undefined reference to `glBegin'..... 結果是glut函數全都不能被識別。究其原因,是因為沒有連結到相應的庫,比如在終端裡用gcc編譯的時候需要手動連結幾個庫: -lGL -lGLU -lglut。因此需要在eclips裡加如這幾個庫。步驟如下:1,點擊Project選折下拉式清單裡的properties2