系統程式設計之程序通訊 共享記憶體

2021-06-10 05:52:23 字數 3267 閱讀 4592

/*shm_com.h*/

#define

text_sz

2048

struct

shared_use_st

;
/*shm1.c*/

/*讀程序

*/
#include

#include

#include

#include

#include

#include

#include

#include

"shm_com.h"

int

main(

void

)

/*對映(附加)共享記憶體*/

shared_memory

=shmat(

shmid

,(void*)0

,0);

if(

shared_memory

==(void*)-

1)

printf(

"memory

attached

at%x\n"

,(int

)shared_memory

);

/*讓結構體指標指向這塊共享記憶體*/

shared_stuff

=(struct

shared_use_st

*)shared_memory

;

/*控制讀寫順序*/

shared_stuff

->

written_by_you=0

;

/*迴圈的從共享記憶體中讀資料,直到讀到「end」為止*/

while

(running

)

}

}

/*分離共享記憶體*/

if(shmdt(

shared_memory

)==-1)

exit(exit_success);

}
/*shm2.c*/
/*寫程序*/
#include

#include

#include

#include

#include

#include

#include

#include

"shm_com.h"

int

main()

/*對映(附加)共享記憶體*/

shared_memory

=shmat(

shmid

,(void*)0

,0);

if(

shared_memory

==(void

*)-1

)

printf(

"memory

attached

at%x\n"

,(int

)shared_memory

);

/*讓結構體指標指向這塊共享記憶體*/

shared_stuff

=(struct

shared_use_st

*)shared_memory

;

/*迴圈的向共享記憶體中寫資料。直到寫入的為「end」為止*/

while

(running

)

printf(

"enter

some

tst:"

);

fgets(

buffer

,bufsiz,stdin);

strncpy(

shared_stuff

->

some_text

,buffer

,text_sz);

shared_stuff

->

written_by_you=1

;

if(strncmp(

buffer

,"end",3

)==0

)

}

/*分離共享記憶體*/

if(shmdt(

shared_memory

)==-1)

/*刪除共享記憶體*/

if(shmctl(

shmid

,ipc_rmid,

0)<0)

//等到所有已附加程序都分離才刪除

exit(exit_success);

}

linux系統程式設計 程序共享記憶體通訊

共享記憶體概述 共享記憶體,就是允許兩個或者多個不同的程序訪問同乙個給定的記憶體,因為資料不需要在程序複製,所以共享記憶體是最快的一種ipc,不同的程序將同一段物理位址對映到各自的程序中,如果乙個程序向共享記憶體寫資料,所做的改動將立即影響到可以訪問同一段共享記憶體的任何其他程序。注 當乙個程序在共...

系統程式設計之共享記憶體

1.概述 共享記憶體是程序間通訊中最簡單的方式之一。共享記憶體允許兩個或更多程序訪問同一塊記憶體,就如同 malloc 函式向不同程序返回了指向同乙個物理記憶體區域的指標。當乙個程序改變了這塊位址中的內容的時候,其它程序都會察覺到這個更改。2.共享記憶體的特點 1.共享記憶體是程序間共享資料的一種最...

《Linux系統程式設計 程序間通訊 共享記憶體》

共享記憶體是程序間通訊中最簡單的方式之一。共享記憶體允許兩個或更多程序訪問同一塊記憶體,就如同 malloc 函式向不同程序返回了指向同乙個物理記憶體區域的指標。當乙個程序改變了這塊位址中的內容的時候,其它程序都會察覺到這個更改。共享記憶體的特點 1 共享記憶體是程序間共享資料的一種最快的方法。乙個...