請你談談共享內存相關的api

Linux允許不同進程訪問同一個邏輯內存,提供了一組API,頭文件在sys/shm.h中。

1)新建共享內存

shmget int shmget(key_t key,size_t size,int shmflg);

key:共享內存鍵值,可以理解爲共享內存的唯一性標記。

size:共享內存大小

shmflag:創建進程和其他進程的讀寫權限標識。 返回值:相應的共享內存標識符,失敗返回-1

2)連接共享內存到當前進程的地址空間

shmat void *shmat(int shm_id,const void *shm_addr,int shmflg);

shm_id:共享內存標識符

shm_addr:指定共享內存連接到當前進程的地址,通常爲0,表示由系統來選擇。

shmflg:標誌位 返回值:指向共享內存第一個字節的指針,失敗返回-1

3)當前進程分離共享內存shmdt int shmdt(const void *shmaddr);

4)控制共享內存shmctl 和信號量的semctl函數類似,控制共享內存

   int shmctl(int shm_id,int command,struct shmid_ds *buf); shm_id:共享內存標識符

command:有三個值

  1. IPC_STAT:獲取共享內存的狀態,把共享內存的shmid_ds結構複製到buf中。
  2. IPC_SET:設置共享內存的狀態,把buf複製到共享內存的shmid_ds結構。
  3. IPC_RMID:刪除共享內存 buf:共享內存管理結構體。

 

Linux允許不同進程訪問同一個邏輯內存,提供了一組API,頭文件在sys/shm.h中。
1)新建共享內存shmget

int shmget(key_t key,size_t size,int shmflg);

key:共享內存鍵值,可以理解爲共享內存的唯一性標記。

size:共享內存大小

shmflag:創建進程和其他進程的讀寫權限標識。

返回值:相應的共享內存標識符,失敗返回-1

2)連接共享內存到當前進程的地址空間shmat

void *shmat(int shm_id,const void *shm_addr,int shmflg);

shm_id:共享內存標識符

shm_addr:指定共享內存連接到當前進程的地址,通常爲0,表示由系統來選擇。

shmflg:標誌位

返回值:指向共享內存第一個字節的指針,失敗返回-1

3)當前進程分離共享內存shmdt

int shmdt(const void *shmaddr);

4)控制共享內存shmctl

和信號量的semctl函數類似,控制共享內存

int shmctl(int shm_id,int command,struct shmid_ds *buf);

shm_id:共享內存標識符

command: 有三個值

IPC_STAT:獲取共享內存的狀態,把共享內存的shmid_ds結構複製到buf中。

IPC_SET:設置共享內存的狀態,把buf複製到共享內存的shmid_ds結構。

IPC_RMID:刪除共享內存

buf:共享內存管理結構體。
 

函數指針:

1、定義 函數指針是指向函數的指針變量。 函數指針本身首先是一個指針變量,該指針變量指向一個具體的函數。

這正如用指針變量可指向整型變量、字符型、數組一樣,這裏是指向函數。 C在編譯時,每一個函數都有一個入口地址,該入口地址就是函數指針所指向的地址。

有了指向函數的指針變量後,可用該指針變量調用函數,就如同用指針變量可引用其他類型變量一樣,在這些概念上是大體一致的。

2、用途: 調用函數和做函數的參數,比如回調函數。

3、示例: char * fun(char * p)  {…}       // 函數fun char * (*pf)(char * p);             // 函數指針pf pf = fun;                        //函數指針pf指向函數fun pf(p);                        //通過函數指針pf調用函數fun

 

請你講講如何採用單線程的方式處理高併發?

在單線程模型中,可以採用I/O複用來提高單線程處理多個請求的能力,

然後再採用事件驅動模型,基於異步回調來處理事件來 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章