2008年12月2日 星期二

核心目錄下的目錄架構說明

arch :與硬體平台有關的項目,例如 CPU 的等級等等;
crypto :核心所支援的加密的技術,例如 md5 或者是 des 等等;
drivers :一些硬體的驅動程式,例如顯示卡、網路卡、PCI 相關硬體等等;
fs :核心所支援的 filesystems ,例如 vfat, reiserfs, nfs 等等;
lib :一些函式庫;
net :與網路有關的各項協定資料,還有防火牆模組 (net/ipv4/netfilter/*) 等等;
sound :與音效有關的各項模組;

轉錄自鳥哥的Linux私房菜

增加man page的查詢路徑

vi /etc/manpath.config

找尋檔案中MANDATORY_MANPATH的地方
增加一行

MANDATORY_MANPATH 你要增加的路徑(例如/usr/local/man)

以上以Debian為例子

2008年11月13日 星期四

C/C++ 指標(Pointer)

指標變數的變數內容並不是字元或是數值等基本資料型態(int、char、double、float)的值,而是其他變數的記憶體位址(Address)。

指標變數的內容是指向另一個變數的位址。

指標變數宣告的語法:

變數型態 *指標變數名稱

ex:int *ptr
指標變數和指向的變數必須是相同的變數型態:

int *ptr;
char *ptr;
float *ptr;
double *ptr;
取得變數位址是使用&運算元,稱為取址,取出位址:
例如一個變數為
int num =5;
num變數的記憶體位址則為&num
而指標變數int *ptr的變數內容要等於num的位址,方法如下:
ptr = #
或是
int *ptr = #也可以
此時ptr的變數內容即為num的記憶體位址

由於宣告指標變數時,並不會給予指標變數預設值,可能指向某個記憶體位址,所以為了避免使用到錯誤的記憶體位址,因此在宣告指標變數時,給予預設值,因此我們可以讓指標變數指向NULL常數,如下:
int *ptr = NULL;
char *ptr = NULL;
....等

指向NULL代表此指標變數不指向任何記憶體為址,如此一來在寫程式時,可以用來判斷,是否指向正確的記憶體位置,如下:

if ( ptr == NULL )
printf("This is NULL\n");
else
printf("ptr's value = %p\n", ptr);

取得指標變數所指的變數值,請使用*運算元,稱為取值,取出所指向變數的數值或內容:
*ptr --> num
printf("num's value = %d\n", *ptr);

指標變數也可以在宣告時指定初值,不過取得位址的變數一定需要在指標變數前宣告,例如:

int j;

int *prt = &j;

2008年10月30日 星期四

C/C++ printf使用說明

- 列印格式-
-輸出敘述

%c -字元
%s -字串
%d -十進位整數
%u -無號十進位整數
%o -無號八進位整數
%x -無號十六進位整數,以 0 ~ f 表示
%X -無號十六進位整數,以 0 ~ F 表示--
%f -浮點數,小數點型式
%e -浮點數,指數e型式
%E -浮點數,指數E型式
%g -印出 %f 與 %e 較短者
%G -印出 %F 與 %E 較短者
%p -指標位址
%%
-印出百分比符號
-
-控制字元--
-功能
\a -警告音
\b -倒退
\f -換頁
\n -換行
\r -歸位
\t -跳格
\’ -印出單引號
\” -印出雙引號
\\ -反斜線
\/ -斜線
\d -八進位 Ascii 碼
\x -十六進位 Ascii 碼--
-
-修飾子-
-功能
-範例
-
- 向左對齊 -%-3d
+ 將數值的正負號顯示出來 -%+5d
空白 數值為正值時,留一格空白;為負值時,顯示負號 -% 6f
0 將固定欄位長度的數值前空白處填上 0;與 - 修飾子同時使用時,此修飾子無效-- -%07.2f--
數字 欄位長度,當數值的位數大於所定的欄位長度時,欄位會自動加寬它的長度 -%9d
. 數值以 %e, %E, %f 型式表示時,決定小數點後所要顯示的位數 -%4.3f
h 表示 short int 或是 unsigned short int -%5h
l 表示 long int 或是 unsigned long int -%lu

C/C++ 使用typedef建立新型態

使用tyepdef可以重新定義宣告型態成為自行訂定義名稱,使用方法如下:

typedef int INT;
typedef char CHAR;
typedef float FLOAT;
typedef double DOUBLE;

struct company
{
char companyName[20];
char companyAddr[100];
};

重新定義struct company結構宣告型態:
typedef struct company COMPANY;

使用方式如下:

INT a;
CHAR b;
FLOAT c;
DOUBLE d;
COMPANY com;

2008年10月27日 星期一

C/C++ 巢狀結構

巢狀結構指的是結構裡面還有結構。



舉例來說,一間公司如果還有其下子公司,就可以用巢狀結構來表示,例如

子公司結構
struct subCompany
{
char subCompName[20];
char subCompAddr[100];
} ;

母公司結構包含子公司結構

struct mainCompany
{
char mainCompName[20];
char mainCompAddr[100];

struct subCompany comp1;
} ;

宣告一個母公司結構,旗下包含一間子公司,如下:

struct mainCompany asus = {"asus", "台北市北投區", {"和碩", "台北市士林區"}};

存取與使用巢狀結構變數的方法如下:
asus.mainCompName;
asus.mainCompAddr;
asus.comp1.subCompName;
asus.comp1.subCompAddr;

C/C++ 結構陣列

『結構陣列』,Array of Structure,是一種結構型態的陣列。

例如,company的結構:

struct company
{
char companyName[20];
char companyAddress[100];
};

如果要宣告一個結構陣列,儲存三家公司的名稱與地址:

struct company compy[3];

compy這個陣列有三個company結構變數,每個結構變數都擁有companyName與companyAddress這兩個成員

存取與使用結構變數的方法如下:
compy[i].companyName;
compy[i].companyAddress;