📄 nettest.cc
字号:
// nettest.cc // Test out message delivery between two "Nachos" machines,// using the Post Office to coordinate delivery.//// Two caveats:// 1. Two copies of Nachos must be running, with machine ID's 0 and 1:// ./nachos -m 0 -o 1 &// ./nachos -m 1 -o 0 &//// 2. You need an implementation of condition variables,// which is *not* provided as part of the baseline threads // implementation. The Post Office won't work without// a correct implementation of condition variables.//// Copyright (c) 1992-1993 The Regents of the University of California.// All rights reserved. See copyright.h for copyright notice and limitation // of liability and disclaimer of warranty provisions.#include "copyright.h"#include "system.h"#include "network.h"#include "post.h"#include "interrupt.h"// Test out message delivery, by doing the following:// 1. send a message to the machine with ID "farAddr", at mail box #0// 2. wait for the other machine's message to arrive (in our mailbox #0)// 3. send an acknowledgment for the other machine's message// 4. wait for an acknowledgement from the other machine to our // original messagevoidMailTest(int farAddr){ PacketHeader outPktHdr, inPktHdr; MailHeader outMailHdr, inMailHdr; char *data = "Hello there!"; char *ack = "Got it!"; char buffer[MaxMailSize]; // construct packet, mail header for original message // To: destination machine, mailbox 0 // From: our machine, reply to: mailbox 1 outPktHdr.to = farAddr; outMailHdr.to = 0; outMailHdr.from = 1; outMailHdr.length = strlen(data) + 1; // Send the first message postOffice->Send(outPktHdr, outMailHdr, data); // Wait for the first message from the other machine postOffice->Receive(0, &inPktHdr, &inMailHdr, buffer); printf("Got \"%s\" from %d, box %d\n",buffer,inPktHdr.from,inMailHdr.from); fflush(stdout); // Send acknowledgement to the other machine (using "reply to" mailbox // in the message that just arrived outPktHdr.to = inPktHdr.from; outMailHdr.to = inMailHdr.from; outMailHdr.length = strlen(ack) + 1; postOffice->Send(outPktHdr, outMailHdr, ack); // Wait for the ack from the other machine to the first message we sent. postOffice->Receive(1, &inPktHdr, &inMailHdr, buffer); printf("Got \"%s\" from %d, box %d\n",buffer,inPktHdr.from,inMailHdr.from); fflush(stdout); // Then we're done! interrupt->Halt();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -