Linux C 函式總結

2021-06-26 10:09:17 字數 4143 閱讀 4908

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 假 在乙個使用迴圈語句為這個函式提供舒服的完整程式中進行測試。...