두 프로 세 스 공유 메모리, 쓰기, 읽 기
3916 단어 알고리즘
다른 명령 행 창 을 열 면 새 프로 세 스 를 만 들 수 있 기 때문에 명시 적 으로 프로 세 스 를 만 들 지 않 습 니 다.
// (write)
#include
#include
#include
#include
#include
#include
#include
#define MAX 32
void *pAddr;
int shmId;
struct Msg{
int flag;//0 ,1
long long content[MAX];
}; //content: catalan flag:
void Handle(int s){
if(s == 2)
{
// , shmat (attach) (detach)
shmdt(pAddr);
shmctl(shmId,IPC_RMID,0); // ,
exit(0);
}
}
int main(){
int n = 0; //Catalan
int i=0,j=0;
/*
ctrl+c , 、 (handle ), exit(0)
signal signal , handle 2 handle
*/
signal(2,Handle);
/*
key_t ftok(char *fname,int id) key_t
IPC key, 。"." , ftok , read
, ftok , key
*/
key_t key = ftok(".",2);
/*
,shmId
100 100 ;IPC_CREAT | IPC_EXCL | 0666 : ,
-1,0666 3 ,6 110, , ,
group ,
*/
shmId = shmget(key,100,IPC_CREAT | IPC_EXCL | 0666);
pAddr = shmat(shmId,0,0); // , , 0 , 0
if(*(int *)pAddr == -1){
printf("shmat error!
");
exit(0);
}
memset(pAddr,0,100); // pAddr 100 NULL
struct Msg *msg = (struct Msg *)pAddr; //msg
msg->flag = 1; //
while(1){
if(msg->flag == 1){// 1 ,
i=0;
for(i=0;icontent[i]=0; //
printf("The number of catalan:");
scanf("%d",&n);
msg->content[0] = 1;
for(j=1;jcontent[j] = msg->content[j-1]*(4*j+2)/(j+2); // Catalan
msg->flag = 0;// flag 0, ,
}
else{
sleep(1); // 1s, msg ( )
}
}
return 0;
}
// (read)
#include
#include
#include
#include
#include
#include
#include
#define MAX 32
void *pAddr;
int shmId;
struct Msg{
int flag;
long long content[MAX];
};
int main(){
int i=0;
key_t key = ftok(".",2);
shmId = shmget(key,0,0); //key writed key , 0
pAddr = shmat(shmId,0,0); //
if(*(int *)pAddr == -1){
printf("shmat error!
");
exit(0);
}
struct Msg * msg = (struct Msg *)pAddr;
while(1){
if(msg->flag == 0){// 0 ,
i=0;
while(msg->content[i]!=0)
{
printf("%lld
",msg->content[i]);
i++;
}
msg->flag = 1;
}
else{
sleep(1);
}
}
return 0;
}
본문 참고
참조 소스 코드 https://blog.csdn.net/qq_29762941/article/details/79985377
공유 메모리 함수 https://blog.csdn.net/guoping16/article/details/6584058
signal () 함수 https://blog.csdn.net/chenjianqi0502/article/details/78579541
shmget 의 인자https://blog.csdn.net/ec06cumt/article/details/51444961 https://blog.csdn.net/Fly_as_tadpole/article/details/81044096
ftok () 함수
https://www.cnblogs.com/joeblackzqq/archive/2011/05/31/2065161.html https://www.cnblogs.com/HectorInsanE/archive/2011/03/17/1986859.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
물체 검출의 평가 지표 IoU의 계산 방법Yolo나 SSD 등 물체 검출에서 평가 지표로 사용되는 IoU에 대해 조사했으므로 정리했습니다. IoU (Intersection over Union)는 두 영역이 얼마나 겹치는지를 나타내는 지표입니다. 두 영역의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.