• 大小: 17.73MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-04
  • 语言: 其他
  • 标签: 进程通信  

资源简介

编写两个进程,一进程负责发送字符 串,另一进程负责接收字符串; 支持Windows/linux的共享存储区、消息、有名和无名管道、Socket通信 发送进程应可以从窗口或键盘上接收字符串; 接收进程应可将字符串显示在窗口上;

资源截图

代码片段和文件信息

/************ 
 * MsgQue.c *
 ************/

#include 
#include 
#include 
#include 
#include 
#include 

#define MAX_SEND_SIZE 80

struct mymsgbuf {
long mtype;
char mtext[MAX_SEND_SIZE];
};

void send_message(int qid struct mymsgbuf *qbuf long type char *text);
void read_message(int qid struct mymsgbuf *qbuf long type);
void remove_queue(int qid);
void change_queue_mode(int qid char *mode);
void usage(void);


int main(int argc char *argv[])
{
key_t key;
int msgqueue_id;
struct mymsgbuf qbuf;

if(argc == 1)
usage();

/* Create unique key via call to ftok() */
/* key = ftok(“.“ ‘w‘); */ 
key = 123456;
printf(“key=%d\n“key);
key=IPC_PRIVATE;
/* Open the queue - create if necessary */

if((tolower(argv[1][0]))!=‘s‘)
{
if((msgqueue_id = msgget(key IPC_CREAT|0666)) == -1) {
perror(“msgget“);
exit(1);
}
printf(“msgqueue_id=%d\n“msgqueue_id);
}

switch(tolower(argv[1][0]))
{
case ‘s‘: send_message(atoi(argv[4]) (struct mymsgbuf *)&qbuf
atol(argv[2]) argv[3]); 
break;
case ‘r‘: read_message(msgqueue_id &qbuf atol(argv[2])); 
break;
case ‘d‘: remove_queue(atoi(argv[2])); 
remove_queue(msgqueue_id);
break; 
case ‘m‘: change_queue_mode(msgqueue_id argv[2]); 
break;

default: usage();

}

return(0);
}

void send_message(int qid struct mymsgbuf *qbuf long type char *text)
{
printf(“msgqueue_id=%d\n“qid);
/* Send a message to the queue */
printf(“Sending a message ...\n“);
qbuf->mtype = type;
strcpy(qbuf->mtext text);
printf(“ Type: %ld Text: %s\n“ qbuf->mtype qbuf->mtext);

if((msgsnd(qid (struct msgbuf *)qbuf
strlen(qbuf->mtext)+1 0)) ==-1)
{
perror(“msgsnd“);
exit(1);
}
}

void read_message(int qid struct mymsgbuf *qbuf long type)
{
/* Read a message from the queue */
printf(“Reading a message ...\n“);
qbuf->mtype = type;
msgrcv(qid (struct msgbuf *)qbuf MAX_SEND_SIZE type 0);

printf(“ Type: %ld Text: %s\n“ qbuf->mtype qbuf->mtext);
}

void remove_queue(int qid)
{
/* Remove the queue */
msgctl(qid IPC_RMID 0);
}

void change_queue_mode(int qid char *mode)
{
struct msqid_ds myqueue_ds;

/* Get current info */
msgctl(qid IPC_STAT &myqueue_ds);

/* Convert and load the mode */
sscanf(mode “%ho“ &myqueue_ds.msg_perm.mode);

/* Update the mode */
msgctl(qid IPC_SET &myqueue_ds);
}

void usage(void)
{
fprintf(stderr “msgtool - A utility for tinkering with msg queues\n“);
fprintf(stderr “\nUSAGE: msgtool (s)end   \n“);
fprintf(stderr “ (r)ecv \n“);
fprintf(stderr “ (d)elete\n“);
fprintf(stderr “ (m)ode \n“);
fprintf(stderr “note: type must be number!\n“);
exit(1);


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2654  2010-07-08 22:51  源代码\linux进程通信\message\MsgQue.c

     文件       1200  2010-07-08 22:51  源代码\linux进程通信\pipe\apptest.c

     文件       1058  2010-07-08 22:51  源代码\linux进程通信\pipe\fifo_open_test.c

     文件        953  2010-07-08 22:51  源代码\linux进程通信\pipe\fifo_w_test_1.c

     文件        836  2010-07-08 22:51  源代码\linux进程通信\pipe\fifo_w_test_2.c

     文件       3358  2010-07-08 22:51  源代码\linux进程通信\pipe\plot.c

     文件        847  2010-07-08 22:51  源代码\linux进程通信\pipe\readtest.c

     文件        655  2010-07-08 22:51  源代码\linux进程通信\pipe\writetest1.c

     文件        776  2010-07-08 22:51  源代码\linux进程通信\pipe\writetest2.c

     文件        688  2010-07-08 22:51  源代码\linux进程通信\sharememory\shm.c

     文件        760  2010-07-08 22:51  源代码\linux进程通信\sharememory\shmread.c

     文件        786  2010-07-08 22:51  源代码\linux进程通信\sharememory\shmwrite.c

     文件        896  2010-07-08 22:51  源代码\linux进程通信\socket\client.c

     文件       1353  2010-07-08 22:51  源代码\linux进程通信\socket\server.c

     文件      53544  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.aps

     文件       1319  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.clw

     文件       2194  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.cpp

     文件       4437  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.dsp

     文件        535  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.dsw

     文件       1371  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.h

     文件   12782592  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.ncb

     文件     129024  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.opt

     文件        741  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.plg

     文件       5661  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.rc

     文件        334  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.sln

     文件       1415  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\Client.vcproj.wqlong-PC.wqlong.user

     文件       5869  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\ClientDlg.cpp

     文件       1603  2010-07-08 22:50  源代码\windows进程通信\进程通信\Client\ClientDlg.h

     文件    3130368  2010-07-08 22:51  源代码\windows进程通信\进程通信\Client\Debug\Client.bsc

     文件     143477  2010-07-08 22:51  源代码\windows进程通信\进程通信\Client\Debug\Client.exe

............此处省略94个文件信息

评论

共有 条评论