共有メモリ Sytem V IPC
POSIX shm
POSIX / Semapho のメモ 【C言語】親子プロセス間で共有メモリを使う - 意味悲鳴
i1-1.c
#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <signal.h> int EndFlag=0; void sigHandle(int sig) { EndFlag=sig; } int main() { int id; int *adr; //int adr; key_t key; signal(SIGINT,sigHandle); signal(SIGTERM,sigHandle); signal(SIGQUIT,sigHandle); /* debug */ key = ftok("/tmp/test", 12345); perror("ftok"); //if((id=shmget(IPC_PRIVATE,512,IPC_CREAT|0666))==-1){ printf("int size=%d byte", sizeof(int)); if((id=shmget(key,4,IPC_CREAT|0666))==-1){ perror("shmget"); return(-1); } perror("shmget"); printf("¶¦Í¥á¥â¥ê¡¼ID=%d\n",id); if((adr=shmat(id,NULL,0))==(int *)-1){ perror("shmat"); } else{ //strcpy(adr,"Initial"); *adr = 2147483646; while(1){ printf("%d\n",*adr); //printf("%s\n",adr); //if(strcmp(adr,"end")==0){ // break; //} if(EndFlag!=0){ fprintf(stderr,"EndFlag=%d\n",EndFlag); break; } sleep(3); } if(shmdt(adr)==-1){ perror("shmdt"); } } if(shmctl(id,IPC_RMID,0)==-1){ perror("shmctl"); } return(0); }
i1-2.c
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <unistd.h> int main(int argc,char *argv[]) { int id; int *adr/*,*ptr*/; //int adr; key_t key; if(argc<=1){ fprintf(stderr,"¶¦Í¥á¥â¥ê¡¼ID¤ò°ú¿ô¤Ë»ØÄꤹ¤ë¤³¤È¡£\n"); return(-1); } id=atoi(argv[1]); /* debug */ key = ftok("/tmp/test", 12345); perror("ftok"); if((id=shmget(key,1,IPC_CREAT|0666))==-1){ perror("shmget"); return(-1); } perror("shmget"); if((adr=shmat(id,NULL,0))==(int *)-1){ perror("shmat"); } else{ while(1){ sleep(3); printf("%d\n", *adr); *adr = *adr + 1; /* fgets(adr,512,stdin); if((ptr=strrchr(adr,'\n'))!=NULL){ *ptr='\0'; } if(strcmp(adr,"end")==0){ break; } */ } if(shmdt(adr)==-1){ perror("shmdt"); } } return(0); }