资源简介
编写两个进程,一进程负责发送字符 串,另一进程负责接收字符串;
支持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个文件信息
- 上一篇:Extjs Lib 包
- 下一篇:Netapp存储管理系统中文版
评论
共有 条评论