하지만, 부모 자식 관계 외에도 서로 다른 별개의 프로세스간에 정보를 공유하기 위한 방법은 다음의 함수들을 이용한 방법을 이용한다.
간단하다면 간단하고 복잡하다면 복잡하다는 이용 scenario.
A 프로세서에서 shmget()를 이용하여 shared memory의 fd(file descriptor)를 반환 받는다. 이때 인자로는 이 공유 메모리를 식별 할 수 있는 key를 넘겨준다. shmat()에서 이 fd를 이용하여 pointer를 받을 수 반환 받을 수 있다. 이 이후에 Read/Write 작업을 수행 후 shmdt()를 이용하여 해제한다.
B 프로세서에서 shmget()를 이용하여 shared memory의 fd( file descriptor)를 반환 받고, shmat()에서 이 fd를 이용하여 pointer를 받을 수 반환 받을 수 있다. 이 이후에 Read/Write 작업을 수행 후 shmdt()를 이용하여 해제한다.
간단하다면 간단하고 복잡하다면 복잡하다는 이용 scenario.
A 프로세서에서 shmget()를 이용하여 shared memory의 fd(file descriptor)를 반환 받는다. 이때 인자로는 이 공유 메모리를 식별 할 수 있는 key를 넘겨준다. shmat()에서 이 fd를 이용하여 pointer를 받을 수 반환 받을 수 있다. 이 이후에 Read/Write 작업을 수행 후 shmdt()를 이용하여 해제한다.
B 프로세서에서 shmget()를 이용하여 shared memory의 fd( file descriptor)를 반환 받고, shmat()에서 이 fd를 이용하여 pointer를 받을 수 반환 받을 수 있다. 이 이후에 Read/Write 작업을 수행 후 shmdt()를 이용하여 해제한다.
Concept Shared mem.
//---------------------------- send.c #include#include #include void main() { int id; char *p; id = shmget( 0x777, 100, IPC_CREAT ); p = (char *p)shmat( id, 0, 0 ); gets( p ); shmdt(p); }
//----------------------------recv.c #include#include #include void main() { int id; char *p; id = shmget( 0x777, 100, IPC_CREAT ); p = (char *p)shmat( id, 0, 0 ); printf("%s", p ); shmdt(p); }
int shmget(key_t key, int size, int shmflg);
헤더 |
#include <sys/ipc.h> | |||||||||||||
형태 | int shmget(key_t key, int size, int shmflg); | |||||||||||||
인수 |
| |||||||||||||
반환 |
|
void *shmat(int shmid, const void *shmaddr, int shmflg);
헤더 |
#include <sys/type.h> | |||||||||||||
형태 | void *shmat(int shmid, const void *shmaddr, int shmflg); | |||||||||||||
인수 |
| |||||||||||||
반환 |
|
int shmdt(const void *shmaddr);
헤더 |
#include <sys/type.h> | |||||
형태 | int shmdt(const void *shmaddr); | |||||
인수 |
| |||||
반환 |
|
'MISCELLANEOUSNESS' 카테고리의 다른 글
Tron (2) | 2010.06.25 |
---|---|
throw, try, catch를 C언어 버젼으로 구현할 수 있다? 없다? (0) | 2010.06.23 |
linux v2.6.11.5 kernel scheduler algorithm. (0) | 2010.06.23 |