sysv 共享記憶體。
sysv 共享記憶體和posix 共享記憶體類似。主要用到的api有 shmget, shmat, shmctl, shmdt,下面將這些api一一道來。
intshmget(key_t key, size_t size,
intoflag);
返回: 成功返回共享記憶體的描述字,出錯時 -1
在多程序環境中, 經常會碰到該呼叫返回失敗的情況, 比如說返回乙個eexist錯誤,是最常見的情況,這時我們可以按如下方式處理:
shmid
=shmget(key,
sizeof
(struct
***), ipc_creat
|ipc_excl
|0666
);void
*shmat(
intshmid,
const
void
*addr,
intflag);
返回: 成功返回對映區的起始位址,否則返回null
一般情況下, 可以按如下方式處理:
***=shmat(shmid, null, 0);
if(***
==null)
return-1
; 類似與ioctl, fcntl, sysv也有用來設定共享記憶體的乙個介面,shmctl
intshmctl(
intsemid,
intcmd,
struct
shmid_ds
*buf);
返回: 成功返回0, 否則返回-1
該呼叫提供了三個命令:
ipc_stat, ipc_set, ipc_rmid
最後,刪除該共享記憶體的呼叫shmdt
intshmdt(
const
void
*addr)
返回:成功返回0, 否則,為-1
程序間通訊(二)
傳遞更多的資料 到目前為止我們所用的機制只是簡單的在乙個fread或是fwrite中傳送或是接收全部的資料。有時我們也許以更小的尺寸傳送資料,或是也許我們並不知道輸出的大小。為了避免宣告乙個大的緩衝區,我們可以使用多個fread或是fwrite呼叫並分別處理這些資料。下面是乙個程式,popen3.c...
程序間通訊(二)
傳遞更多的資料 到目前為止我們所用的機制只是簡單的在乙個fread或是fwrite中傳送或是接收全部的資料。有時我們也許以更小的尺寸傳送資料,或是也許我們並不知道輸出的大小。為了避免宣告乙個大的緩衝區,我們可以使用多個fread或是fwrite呼叫並分別處理這些資料。下面是乙個程式,popen3.c...
程序間通訊(二)
傳遞更多的資料 到目前為止我們所用的機制只是簡單的在乙個fread或是fwrite中傳送或是接收全部的資料。有時我們也許以更小的尺寸傳送資料,或是也許我們並不知道輸出的大小。為了避免宣告乙個大的緩衝區,我們可以使用多個fread或是fwrite呼叫並分別處理這些資料。下面是乙個程式,popen3.c...