linux c 的記憶體分配
3個儲存空間動態分配和乙個記憶體釋放的函式
malloc
記憶體分配指定位元組儲存區,初始值不為0
calloc
為指定個數的具有指定長度的物件分配儲存空間,每一位初始化為0
reallco
更改以前的分配區長度(可增,可減),當增加時,將以前的分配區內容遷移到乙個足夠大的區域,在尾部增加,新增加的初始值不確定.
free
釋放指向的儲存空間,空間放入系統可用儲存區池
分配成功返回指向分配區的指標,否則返回空指標
free無返回值
//得到環境變數
char getenv(const char* name)
setenv 改變或增加環境變數
unsetenv 刪除環境變數
putchar(int c) //單字元的輸出
floor(double x) //不大於
double modf(double x,double *ptr) //將浮點數分為 整數部分和小數部分
//字串轉換函式
#includeint atoi(const char *nptr)
long atol(const char *nptr)
long long atoll(const char *nptr)
long long atoq(const char *nptr)
linux的出錯處理:
linux 呼叫的函式出錯,返回乙個負值 此時errno常常被設定為乙個含有附加資訊的值
字串複製函式
void *memccpy(void *dest, void *src, unsigned char ch, unsigned int count);
用法:#include 功能:由src所指記憶體區域複製不多於count個位元組到dest所指記憶體區域,如果遇到字元ch則停止複製。
說明:返回指向字元ch後的第乙個字元的指標,如果src前n個位元組中不存在ch則返回null。ch被複製。
字串長度計算函式
size_t strlen(const char *s)
//字串連線
char *strcat(char *dest,const char *src)
char *strncat(char *dest,const char *src,size_t n)
字串複製函式
strcpy
strncpy
字串比較函式
strcmp
strncmp
字串查詢函式
char* strstr(string,search)
string必需。規定被搜尋的字串。
search必需。規定所搜尋的字串。
//找到返回字元的起始位置,否則返回null
#include#include#includeusing namespace std;
int main(int argc,char* argv) /*
[zhjh@localhost code]$ ./tem
ello world
*/
記憶體分配函式
#includeint getpagesize(void)
記憶體對映函式
#includevoid *mmap(void *addr,size_t length,int prot,int flas,)
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
length:對映區的長度。//長度單位是 以位元組為單位,不足一記憶體頁按一記憶體頁處理
prot:期望的記憶體保護標誌,不能與檔案的開啟模式衝突。是以下的某個值,可以通過or運算合理地組合在一起
prot_exec //頁內容可以被執行
prot_read //頁內容可以被讀取
prot_write //頁可以被寫入
prot_none //頁不可訪問
flags:指定對映物件的型別,對映選項和對映頁是否可以共享。它的值可以是乙個或者多個以下位的組合體
map_fixed //使用指定的對映起始位址,如果由start和len引數指定的記憶體區重疊於現存的對映空間,重疊部分將會被丟棄。如果指定的起始位址不可用,操作將會失敗。並且起始位址必須落在頁的邊界上。
map_shared //與其它所有對映這個物件的程序共享對映空間。對共享區的寫入,相當於輸出到檔案。直到msync()或者munmap()被呼叫,檔案實際上不會被更新。
map_private //建立乙個寫入時拷貝的私有對映。記憶體區域的寫入不會影響到原檔案。這個標誌和以上標誌是互斥的,只能使用其中乙個。
map_denywrite //這個標誌被忽略。
map_executable //同上
map_noreserve //不要為這個對映保留交換空間。當交換空間被保留,對對映區修改的可能會得到保證。當交換空間不被保留,同時記憶體不足,對對映區的修改會引起段違例訊號。
map_locked //鎖定對映區的頁面,從而防止頁面被交換出記憶體。
map_growsdown //用於堆疊,告訴核心vm系統,對映區可以向下擴充套件。
map_anonymous //匿名對映,對映區不與任何檔案關聯。
map_anon //map_anonymous的別稱,不再被使用。
map_file //相容標誌,被忽略。
map_32bit //將對映區放在程序位址空間的低2gb,map_fixed指定時會被忽略。當前這個標誌只在x86-64平台上得到支援。
map_populate //為檔案對映通過預讀的方式準備好頁表。隨後對對映區的訪問不會被頁違例阻塞。
map_nonblock //僅和map_populate一起使用時才有意義。不執行預讀,只為已存在於記憶體中的頁面建立頁表入口。
fd:有效的檔案描述詞。一般是由open()函式返回,其值也可以設定為-1,此時需要指定flags引數中的map_anon,表明進行的是匿名對映。
off_toffset:被對映物件內容的起點。
成功執行時,mmap()返回被對映區的指標,munmap()返回0。失敗時,mmap()返回map_failed[其值為(void *)-1],munmap返回-1。errno被設為以下的某個值
#include #include #include #include #include #include #define handle_error(msg) \
do while (0)
intmain(int argc, char *argv)
fd = open(argv[1], o_rdonly);
if (fd == -1)
handle_error("open");
if (fstat(fd, &sb) == -1) /* to obtain file size */
handle_error("fstat");
offset = atoi(argv[2]);
pa_offset = offset & ~(sysconf(_sc_page_size) - 1);
/* offset for mmap() must be page aligned */
if (offset >= sb.st_size)
if (argc == 4) else
addr = mmap(null, length + offset - pa_offset, prot_read,
map_private, fd, pa_offset);
if (addr == map_failed)
handle_error("mmap");
s = write(stdout_fileno, addr + offset - pa_offset, length);
if (s != length)
exit(exit_success);
} /* main */
linux c 演算法總結
1 排序演算法 快速排序 合併排序 堆排序選擇排序 基數排序 氣泡排序 插入排序 希爾排序 鍊錶排序 2 資料結構 線性佇列 線性堆疊 單向鍊錶 雙向鍊錶 迴圈單向鍊錶 排序二叉樹 插入,刪除上 中 下 儲存和載入 雜湊表 雜湊二叉樹 3 圖 圖結構圖建立 圖的新增 刪除 圖的儲存 prim演算法 ...
Linux C 函式練習
學習函式主要學習的就是函式的宣告 定義和呼叫,下面請看兩個例子,來幫助我們學習函式 題目一 編寫乙個函式iswithin 它接受兩個引數,乙個是字元,另乙個是字串指標。其功能是如果字元在字串中。就返回1 真 如果字元不在字串中,就返回0 假 在乙個使用迴圈語句為這個函式提供舒服的完整程式中進行測試。...
Linux C 函式練習
學習函式主要學習的就是函式的宣告 定義和呼叫,下面請看兩個例子,來幫助我們學習函式 題目一 編寫乙個函式iswithin 它接受兩個引數,乙個是字元,另乙個是字串指標。其功能是如果字元在字串中。就返回1 真 如果字元不在字串中,就返回0 假 在乙個使用迴圈語句為這個函式提供舒服的完整程式中進行測試。...