unix c 02

環境變量 - 存儲在內存中的信息,格式是映射,做用就是 幫助系統 進行一些工做,通常是 查找某個東西。
預處理指令:#warning #error #pragma程序員

使用程序直接調用庫文件的函數(動態編程)
   #include <dlfcn.h>
   1 用dlopen打開一個庫文件,返回void*
   2 用dlsym按函數名打開一個函數,返回函數指針
   3 使用函數指針
   4 用dlclose 關閉庫文件。
   5 dlerror函數判斷是否出錯,!=NULL 出錯
   注:dlopen時,flag能夠設置延遲加載
    RTLD_LAZY - 延遲
    RTLD_NOW  - 馬上加載 編程

  C程序員的錯誤處理(針對全部的代碼)
   什麼是錯誤處理?
    程序中有正確的分支和錯誤的分支,關於錯誤的狀況如何處理,就是 錯誤處理。錯誤處理的代碼不影響錯誤是否發生。
    C程序員處理錯誤的方式:(常規方式)
    1 返回-1表明錯誤。
     a 若是-1不是函數的有效返回值,直接返回-1表明錯誤。
     b 若是-1 是函數的有效返回值,用-1表明錯誤,用指針 取返回值。
    2 返回NULL 表明錯誤。
     通常來講,返回值是 指針類型時,用NULL表明錯誤。
    3 不須要考慮錯誤處理的函數 返回void數組

C語言中沒有string,字符串用兩種方式表示:(*)
   char* s1;
   char s2[20];
   其中,s1能夠用 = 賦值,s2只能用=初始化,不能用 = 賦值,s2的賦值使用strcpy函數。
   若是s1 = "aaa";(字面值),不支持strcpy。
  經常使用的字符串函數:
   strcpy - 賦值
   strlen - 取長度
   strcat - 追加內容
   strcmp - 比較兩個字符串(一般斷定字符串相同)
   strncmp - 比較兩個字符串的前n個字符 函數

   C語言對錯誤的處理也有支持,主要是:
   定義了一個全局變量errno,存儲錯誤的編號。
   定義了 strerror/perror/printf("%m")三個函數轉換錯誤編號和錯誤信息,後兩個能夠自動打印。
   注:不是全部的函數都使用errno處理錯誤。 操作系統

  環境變量和環境表在程序中的使用
   C語言中,提供了環境表變量environ 存儲 環境變量的各類信息,類型是 一個 char**(字符指針數組),須要extern。environ存儲的是 首地址。
  Unix/Linux的內存管理(明天繼續)
   STL - 內存自動分配和回收
    |
   C++ - new分配 delete回收
    |
    C - malloc分配 free回收
    |
Linux系統函數 - brk/sbrk
    |
Linux系統函數 - mmap分配 /munmap回收 (用戶層)
——————————————————————
  kmalloc vmalloc 等  (內核層/系統層)
  Unix/Linux內存管理機制:
       虛擬內存地址 - 在Unix/Linux中,每一個進程都有0-4G的虛擬內存地址(其實就是數字)。虛擬內存地址必須映射到物理內存/硬盤文件空間上 才能存儲數據。若是虛擬內存地址 沒有 映射物理內存/文件,會產生 段錯誤/總線錯誤。內存分配 就是 把一部分虛擬內存地址和物理內存 映射起來。程序員看到的都是 虛擬內存地址。
  其中0-3G是用戶使用的,叫用戶空間,3G-4G是操做系統使用的,叫內核空間。用戶空間不能直接進內核空間,但能夠經過 系統函數(系統調用) 進入內核空間。
  內存的分配和回收不是 以 一個字節做爲單位,以 一個內存頁(4096字節 4k) 做爲單位。
  Unix/Linux的進程和程序:
   程序 就是 可執行的文件(硬盤上的)
   進程 就是 正在運行的程序(內存中的)
   內存針對的是進程,進程內存空間的組成:
   1 代碼區 - 存函數的代碼,函數所在區,只讀區
   2 全局區 - 存全局變量和static變量 讀寫區
   3 BSS段 - 存未初始化的全局變量,在main執行前bss段 自動清0.
   4 棧區 - 局部變量,函數參數,內存自動管理
   5 堆區 - 自由區,malloc new分配的內存,堆區的內存用 free/delete 回收,不然內存泄漏。
   注:代碼區附近有一個 常量和字符串常量區,存常量和字符串字面值("aa"),也是 只讀區,但 併入代碼區。指針

相關文章
相關標籤/搜索