操作系统课程实验报告4.docx





《操作系统课程实验报告4.docx》由会员分享,可在线阅读,更多相关《操作系统课程实验报告4.docx(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、中央民族大学操作系统实验报告姓名:黄越伶学 号:2.1011656年 级:.202.级院系:信息工程学院专业:软件工程2023年5月16日msgsnd(msgid,&msg,sizeof(struct msgtype),0);将读到信息作为类型 2 返回给队列msgrcv(msgid,&msg,sizeof(stnjct msgtype)/+ 100,0);读类型 i + 100 的消息/fprintf(stderr,Server Receive:%sn,msg.buffer);将接受的数据回显出来 i+;)exit(0);return 0;)连续输入的进程代码:#include #inclu
2、de #include #include #include #include #include #include #define MSG_FILE server.c#define BUFFER 255#define PERM SRUSR|SWUSR struct msgtype long mtype;char bufferBUFFER+l;);int main(int argqchar *argv)(struct msgtype msg;key_t key;int msgid;if(argc!=2)/涛命令行参数太少退出(fprintf(stderr,Usage:%s stringna,arg
3、vO);exit(l);)if(key:ftok(MSG_FILE,a) = = -l)消息键值(fprintf(stdercCreat Key Error:%san,strerror(errno);exit(l);)if(msgid:msgget(key,0666|IPC_CREAT)= = -l)/消息队歹 1建立(fprintf(stderr,Creat Message Error:%sann,strerror(errno);exit(l);)int i=l;while(l)msg.mtype= i; 确定类型if(argvl = = end)break;strncpyfmsg.buff
4、ecargvll,BUFFER);msgsnd(msgid,&msg,sizeof(struct msgtype),0);将消息数据结构中的数据传到消息队列fprintf(stderr,Client receive:%sn,msg.buffer);将接受的数据回显出来memset(&msg,0sizeof(struct msgtype);清空fgets(argvl,BUFFER,stdin);/entry messagei + +;)exit(O);return 0;)3、共享内存:程序一:#include #include #includc #include #includc #includ
5、e #include #include #include #dcfinc PERM SRUSR|SWUSRint main(int argc,char *argv)(int shmid;char *p_addr.*c_addr;if(shmid=shmget(IPC_PRIVATE, 1024.PERM)=-1IK 共享内存区。返回缓冲区的 ID 标识值;若失败则返回-1(fprintf(stdcrr,Create Share Memory Error:%sna,strcrror(cirno);打印错误信息 exil(l); 异常退出char s 1024;创建1k长度的字符数组puts(In
6、put the string you want the memory shared:/);输入要传递的信息gets;获取if(fork。)创建进程,父进程就执行if(p_addr:shmat(shmid.0,0);p_addr存共享内存区shmid的入口,存储段连接到由内核选择的第一个可 以地址上memset(p_addr;Ol 024);清空stmcpy(p_addr,s, 1024);向共享内存区写printf(parent sends: %st,the parents pid is %d,p_addr,getpid();/exit(0);正常退出)elsesleep(l);c_addr=
7、shmat(shmid,0.0);子进程向共享区读出数据printf(ntchild gets: %st,the childs pid is %d,c_addr,getpid();打印读出的数据和当前进程号 exit(O);return 0;I/将向程序输入数据,然后由父进程发送,子进程接受,并且把各自的pid号码显示程序二:#include #include #include #include #includc #include #include #include #include #dcfinc PERM SRUSR|SWUSRint main(int argc,char *argv)in
8、t shmid,i,a256;int *p_addr,*c_addr;if(shmid=shmget(IPC_PRIVATEO24.PERM)=-1 )父进程创建 1 k的共享内存区 |fprin(f(s(derr,Create Share Memory Eiror:%sna,sireiror(errno);/打印创建错误信息 exit(l);/异常退出Iputs(begin:t);printf(the process id is %d, the parents id is %dn,geipid(),getppid();打印当前进程号和父进程id号if(fork()=0)创建进程,子进程执行i
9、f/slccp(2);p_addr=shmat(shmid.O,O);/p_addr存共享内存区slimid的入口,存储段连接到由内核选择的第一个可 以地址上for(i=0;i256;i+)*p_addr+=i;将0-255存到指针p_addr指向的共享内存区printf(the process id is %d. the parents id is %dn”,getpid(),getppid();打印当前进程号和父进程id号 exit(0);正常退出else 父进程(sleep ;c_addr=shmal(shmid.0.0);子进程向共享区读出数据,c_addr存共享内存M shmid的入
10、口for(i=0;i256;i+) ai=*c_addr;将共享内存区的数据存至必数组printf(nt process gets: %d t,the processs id is %d,*c_addr,getpid();打印每个内存地址的数据和当 前进程号c_addr+;)printf(nt processs parent id %d t.the processs id is %dn,getppid(),getpid();打印当前进程号和父进程 id号 c_addr=shmat(shmid,0,0);获取共享内存区首地址 for(i=0;i256;i+)*c_addr+=4巧;将每个内存区每
11、个地址上的值都扩大4倍 c_addr=shmat(shmid,O,O); 再次指向首地址 for(i=0;idefio-vtrtual-Rachtne:$ ./client I LOVE YOUClient receive:you deROdeRO-virtual-Rachtne:$ ./serverServer Receive:ILOVEYOU AC deno0deno-vtrtual-machtne:$ ./client clientClient receive:ILOVEYOU denotdeRo-virtual-machine:$ ./serverServer Recetve:clte
12、nt AC denotdeRO-virtual-Rachtne:$ ipcsMessage Queues statuskeynsqtdownerpernsused-bytes messages0X61016C12 edemo6662641SharedMemory Segments keyshntdownerperRSbytesnattchSemaphoreArrays keysemtdownerpernsnsemsdeRoSdeno-virtual-Rachtne:b4$ s|status连续输入消息队列、输出:Ademo(0demo-virtual-machlne: */lab4Q=-Xde
13、mofldeno-vtrtual-Rachtne: /$ gcc server.c -oserverdenodeno-vtrtualRachtne: demoOdemo-virtual-nachtne:$ gcc client.c -o $ tpcsclientMessageQueues keynsqtdownerpernsused-bytesmessagesSharedMemory Segments - keyshntdownerpernsbytesnattchstatusSemaphoreArrays keysentdownerpermsnsensdenotdeno-virtual-nac
14、htne: Client receive:ab Client receive:b c Client receive:c AC denogdeno-vtrtual-nachtne:$ ./client$ tpcsaMessageQueues keymsqtdownerOx610iebcf 0demoperns 666used-1 792jytesmessages 3SharedMemory Segments keyshntdownerpernsbytesnattchstatusSemaphoreArrays keysentdownerpernsnsensdeno0deno-vtrtual-Rac
15、htne: Server Receive:a Server Receive:b$ ./serverServer Receive:cdeno9deno-virtual-Hachtne: Server Receivers Server Receive:b$ ./serverServer Recetve:cACdenodemo-virtual-machine:$ tpcsMessageQueues keymsqtdownerpernsused-bytesmessages0x61O16bcf 0deno666e0SharedMemory Segmentskeyshntdownerpernsbytesn
16、attchstatusSemaphoreArrays keysentdownerpernsnsensdenogdeno-virtudl-Rachtne:$ ./clientnClient receive:nnClient receive:nu Client receive:uACdeHo0deno-virtual-Rachine:$ tpcsMessageQueues keynsqtdownerpernsused-bytesmessages6x61016bcf 6demo6667923SharedMemory Segments.keyshntdownerpernsbytesnattchstat
17、usSemaphoreArrays keysentdownerpernsnsensdenoadeno-virtual-Rachtne:$ ./serverServer Receive:rServer Receive:nServer Receive:uQ Home0 Documenti5 DownloadsCUent Clientdefno9dmodrtu4-*chlnc: -/lb4demo94fnovirtual- Machine:$ ./serverServer Receive:sServer Receive:fClient-virtual RchtM:-vtrtual-nachtM:re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程 实验 报告

限制150内