終端1**如下,子程序傳送訊息,父程序接收訊息。
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8
9 #define n 128
10 #define size sizeof(struct msgbuf) - sizeof(long)
11 #define type1 100
12 #define type2 200
13 14 struct msgbuf;
18 int main(int argc, const char *ar**)
19 26 /*建立或開啟訊息佇列*/
27 int msqid;
28 struct msgbuf msg_snd, msg_rcv;
29 if((msqid = msgget(key, ipc_creat|ipc_excl|0664)) < 0)
34 else
38 }
39 40 pid_t pid;
41 42 pid = fork();
43 44 if(pid < 0)
48 else if(pid == 0)
60 }
61 }
62 else
70 71 printf("msg_b:%s\n", msg_rcv.buf);
72 }
73 }
74 return 0;
75 err:
76 msgctl(msqid, ipc_rmid, null);
77 }
終端2 的**如下,同樣是子程序傳送訊息,父程序接收訊息。
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8
9 #define n 128
10 #define size sizeof(struct msgbuf) - sizeof(long)
11 #define type1 100
12 #define type2 200
13 14 struct msgbuf;
18 int main(int argc, const char *ar**)
19 26 /*建立或開啟訊息佇列*/
27 int msqid;
28 struct msgbuf msg_snd, msg_rcv;
29 if((msqid = msgget(key, ipc_creat|ipc_excl|0664)) < 0)
34 else
38 }
39 40 pid_t pid;
41 42 pid = fork();
43 44 if(pid < 0)
48 else if(pid == 0)
60 }
61 }
62 else
70 printf("msg_a:%s\n", msg_rcv.buf);
71 }
72 }
73 return 0;
74 err:
75 msgctl(msqid, ipc_rmid, null);
76 }
執行結果如下,終端2執行msg_b.c輸入「hello」,則終端2輸出「hello」;終端1執行msg_a.c輸入「world」,則終端2輸出「world」;當在終端2 輸入「quit」時,程式全部退出,並且訊息佇列刪除。
msg_a.c
linux@master:~/1000phone/msg/msg$ ./msga
msg_b:hello
world
msg_b.c
linux@master:~/1000phone/msg/msg$ ./msgb
hello
msg_a:world
quit
已殺死
7 兩個棧模擬佇列,兩個佇列模擬棧
利用兩個棧模擬佇列 stack1,stack2 首先向stack1當中放入資料,如果需要輸出資料,從stack2中delete資料,如果stack2為空,就把stack1中資料匯入stack2 include static.h include include templateclass cquue ...
兩個棧模擬佇列
演算法導論上的課後題 兩個棧模擬佇列 這個原來做過 一般是這樣 我看網上大概都是這種解法 原來棧空 a b null null 1,2,3入站的時候入a a b 3 null 2 null 1 null 出戰的時候先進b 然後pop b 在調過來進a a b null 1 null 2 null 3...
兩個棧實現佇列 兩個佇列實現棧
1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...