diff --git a/lab7/mushding_ver/A_mushding.c b/lab7/mushding_ver/A_mushding.c new file mode 100644 index 0000000..b43a2fb --- /dev/null +++ b/lab7/mushding_ver/A_mushding.c @@ -0,0 +1,50 @@ +#include +#include +#include +#include +#include +#include + +#define MAX_TEXT 512 + +struct msg_st +{ + long int msg_type; + char text[MAX_TEXT]; +}; + +int main(int argc, char **argv) +{ + struct msg_st data; + char buffer[BUFSIZ]; + int msgid = -1; + + // 建立消息?列 + msgid = msgget((key_t)1234, 0666 | IPC_CREAT); + + // 向消息?里中?消息,直到?入end + while (1) + { + printf("Enter some text: \n"); + fgets(buffer, BUFSIZ, stdin); + data.msg_type = 1; // 注意2 + strcpy(data.text, buffer); + + // 向?列里?送?据 + if (msgsnd(msgid, (void *)&data, MAX_TEXT, 0) == -1) + { + fprintf(stderr, "msgsnd failed\n"); + exit(EXIT_FAILURE); + } + + // ?入end?束?入 + if (strncmp(buffer, "exit\n", 3) == 0) + { + break; + } + + sleep(1); + } + + exit(EXIT_SUCCESS); +} \ No newline at end of file diff --git a/lab7/mushding_ver/B_mushding.c b/lab7/mushding_ver/B_mushding.c new file mode 100644 index 0000000..969132e --- /dev/null +++ b/lab7/mushding_ver/B_mushding.c @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include + +struct msg_st +{ + long int msg_type; + char text[BUFSIZ]; +}; + +int main(int argc, char **argv) +{ + int msgid = -1; + struct msg_st data; + long int msgtype = 0; // 瘜冽?1 + + // 撱箇?瘨?? + msgid = msgget((key_t)1234, 0666 | IPC_CREAT); + + // 隞??銝?瑕?瘨荔?圈??送nd瘨臭蛹甇 + while (1) + { + if (msgrcv(msgid, (void *)&data, BUFSIZ, msgtype, 0) == -1) + { + fprintf(stderr, "msgrcv failed width erro: %d", errno); + } + + printf("You wrote: %s\n", data.text); + + // ?送nd蝏? + if (strncmp(data.text, "exit\n", 3) == 0) + { + break; + } + } + + exit(EXIT_SUCCESS); +} diff --git a/lab7/mushding_ver/csu_mushding.c b/lab7/mushding_ver/csu_mushding.c new file mode 100644 index 0000000..0379bd7 --- /dev/null +++ b/lab7/mushding_ver/csu_mushding.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include +#include +#include +#include + +#define TEXT_SZ 2048 + +struct shared_use_st{ + int written_by_you; + char some_text[TEXT_SZ]; +}; + +int main(){ + int running = 1; + int shmid; + void *shared_memory=(void *) 0; + struct shared_use_st *shared_stuff; + + srand((unsigned int)getpid()); + + shmid = shmget((key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT); + shared_memory = shmat(shmid,(void *) 0,0); + + shared_stuff = (struct shared_use_st *)shared_memory; + shared_stuff->written_by_you = 0; + + while(running){ + if (shared_stuff->written_by_you){ + printf("You wrote:%s",shared_stuff->some_text); + sleep(rand()%4); + shared_stuff->written_by_you = 0; + + if (strncmp(shared_stuff ->some_text,"exit\n",3) == 0){ + running =0; + } + } + } + exit(EXIT_SUCCESS); +} diff --git a/lab7/mushding_ver/pro_mushding.c b/lab7/mushding_ver/pro_mushding.c new file mode 100644 index 0000000..9e8388e --- /dev/null +++ b/lab7/mushding_ver/pro_mushding.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include +#include +#include +#include + +#define TEXT_SZ 2048 + +struct shared_use_st{ + int written_by_you; + char some_text[TEXT_SZ]; +}; + +int main(){ + int running = 1; + int shmid; + void *shared_memory=(void *) 0; + struct shared_use_st *shared_stuff; + + char buffer[BUFSIZ]; + + shmid = shmget((key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT); + shared_memory = shmat(shmid,(void *) 0,0); + shared_stuff = (struct shared_use_st *)shared_memory; + + while(running){ + + printf("Enter some text: "); + fgets(buffer,BUFSIZ,stdin); + + strncpy(shared_stuff->some_text,buffer,TEXT_SZ); + shared_stuff->written_by_you =1; + + if (strncmp(buffer,"exit\n",3) == 0){ + running = 0; + } + } + + exit(EXIT_SUCCESS); +} \ No newline at end of file