📄 计算机世界网-unix中多程序间共享内存.htm
字号:
<TR>
<TD class=a14>char i; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>struct shmid_ds buf; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>key=ftok(" /" , 0); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>shmid=shmget(key,SEGSIZE,IPC_CREAT|0604);
</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>if(shmid ==- 1){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>printf(" create shared momery error\n" );
</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return- 1; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>shm=(char* )shmat(shmid,0,0); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>if((int)shm ==- 1){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>printf(" attach shared momery error\n" );
</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return- 1; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>semid=sem(key); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>for(i=0;i<=3;i++ ){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>sleep(1); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>p(semid); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>sleep(READTIME); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>msg[5]=' 0'+ i; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>memcpy(shm,msg,sizeof(msg)); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>sleep(58); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>v(semid); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>shmdt(shm); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>shmctl(shmid,IPC_RMID,& buf); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>d_sem(semid); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return 0; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>2.Client端程序# define SEGSIZE 1024 </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>union semun { </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int val; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>struct semid_ds* buf; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>ushort_t* array; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} ; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>//打印程序执行时间 </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>void secondpass(){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>static long start=0; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>time_t timer; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>if (start == 0){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>timer=time(NULL); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>start=(long)timer; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>printf(" now start \n" ); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>printf(" second:% ld \n" ,(long)(time(NULL))- start);
</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int sem(key_t key){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>union semun sem ; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int semid; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>sem.val=0; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>semid=semget(key,0,0); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>if (semid ==- 1){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>printf(" get semaphore error\n"); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>exit(- 1); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return semid; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>//等待信号量变成 0 </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>void waitv(int semid){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>struct sembuf sops={0,0,0}; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>semop(semid,& sops,1); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int main(){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>key_t key; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int shmid,semid; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>char* shm; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>char msg[100]; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int i; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>key=ftok(" /" , 0); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>shmid=shmget(key,SEGSIZE,0); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>if(shmid ==- 1){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>printf(" get shared momery error\n" ); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return- 1; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>shm=(char* )shmat(shmid,0,0); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>if((int)shm ==- 1){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>printf(" attach shared momery error\n" );
</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return- 1; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>semid=sem(key); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>for(i=0;i< 3;i++ ){ </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>sleep(2); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>waitv(semid); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>printf(" the msg get is \n% s\n" ,shm+ 1);
</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>secondpass(); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>shmdt(shm); </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>return 0; </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>} </TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>本程序在 Solaris 7下编译通过。</TD></TR></TBODY></TABLE><BR>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD align=right>(网页编辑:<A
href="mailto:app@ccw.com.cn">徐向阳</A>)</TD></TR></TBODY></TABLE><BR>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD align=right>
<FORM action=/pub/subMail.asp method=post
onsubmit="JavaScript: return chkField(this)"><INPUT name=rec type=hidden
value=977> 您的姓名:<INPUT name=myName size=10> 您朋友的E-mail:<INPUT
name=friendMail size=10> <INPUT type=submit value=推荐给好友>
</FORM></TD></TR>
<TR>
<TD align=right><B>[<A href="javascript:window.close()">关闭窗口</A>]</B>
</TD></TR></TBODY></TABLE>
<SCRIPT language=javascript>function chkField(fmObj)
{if (!fmObj.friendMail.value){
alert("请输入您朋友的E-mail!");
fmObj.friendMail.focus();
return false;
}
return true;
}
</SCRIPT>
<TABLE align=center width=680>
<TBODY>
<TR>
<TD>
<HR color=#f46240 SIZE=1 width=660>
</TD></TR></TBODY></TABLE><BR>
<P align=center>Copyright(C) ccw.com.cn,All rights reserved</P>
<P align=center><B>中国计算机世界出版服务公司版权所有</B></P></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -