Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions lab7/mushding_ver/A_mushding.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/msg.h>
#include <errno.h>

#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;

// �إ߮���?�C
msgid = msgget((key_t)1234, 0666 | IPC_CREAT);

// �V����?����?�����A����?�Jend
while (1)
{
printf("Enter some text: \n");
fgets(buffer, BUFSIZ, stdin);
data.msg_type = 1; // �`�N2
strcpy(data.text, buffer);

// �V?�C��?�e?�u
if (msgsnd(msgid, (void *)&data, MAX_TEXT, 0) == -1)
{
fprintf(stderr, "msgsnd failed\n");
exit(EXIT_FAILURE);
}

// ?�Jend?��?�J
if (strncmp(buffer, "exit\n", 3) == 0)
{
break;
}

sleep(1);
}

exit(EXIT_SUCCESS);
}
40 changes: 40 additions & 0 deletions lab7/mushding_ver/B_mushding.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/msg.h>
#include <errno.h>

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);

// 从�??�中?��?消息,直?��??�end消息为止
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);

// ?�到end结�?
if (strncmp(data.text, "exit\n", 3) == 0)
{
break;
}
}

exit(EXIT_SUCCESS);
}
42 changes: 42 additions & 0 deletions lab7/mushding_ver/csu_mushding.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#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);
}
42 changes: 42 additions & 0 deletions lab7/mushding_ver/pro_mushding.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#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);
}