设为首页 加入收藏

TOP

多进程编程: Perl与C进程间的消息队列通信(二)
2014-11-23 23:11:42 来源: 作者: 【 】 浏览:5
Tags:进程 编程 Perl 消息 队列 通信
24) or die "receive message failed: $!";
print "BUFFER: ",$buf,"\n";
my $pos = index($buf, "end", 0);
print "POS: ",$pos,"\n";
if ($pos != -1)
{
$running = 0;
}
}
$msg->remove();
发送端采用C代码实现
msg_snd.c
#include
#include
#include
#include
#include
#define MAX_TEXT 512
struct my_msg_st
{
long int my_msg_type;
char some_text[MAX_TEXT];
};
int main()
{
int index;
struct my_msg_st some_data;
int msgid;
msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
if (msgid == -1)
{
fprintf(stderr, "msgget failed with error: %d\n", errno);
exit(EXIT_FAILURE);
}
for (index = 0; index < 10; index++)
{
memset(some_data.some_text, 0, MAX_TEXT);
some_data.my_msg_type = 1;
snprintf(some_data.some_text,MAX_TEXT, "%s~%d","index",index);
if (msgsnd(msgid, (void *)&some_data, MAX_TEXT, 0) == -1)
{
fprintf(stderr, "msgsnd failed\n");
exit(EXIT_FAILURE);
}
}
/* ending */
memset(some_data.some_text, 0, MAX_TEXT);
some_data.my_msg_type = 1;
snprintf(some_data.some_text,MAX_TEXT, "%s","end");
if (msgsnd(msgid, (void *)&some_data, MAX_TEXT, 0) == -1)
{
fprintf(stderr, "msgsnd failed\n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
编译与运行:
$gcc -g -Wall -o msg_snd msg_snd_c.c
$./msg_rcv.pl &
$./msg_snd
输出:
MSG_ID: 393219
BUFFER: index~0
BUFFER: index~1
BUFFER: index~2
BUFFER: index~3
BUFFER: index~4
BUFFER: index~5
BUFFER: index~6
BUFFER: index~7
BUFFER: index~8
BUFFER: index~9
BUFFER: end
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇九度教程第25题 下一篇指针数组与数组指针

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: