程序的实现是两个进程,通过信号量来实现通信,发送方先request发送方的信号量,然后发送,然后再release接收方信号量,这样可以通知接手方可以接收了,接受方接收以后再通过信号量通知发送方,一直这样循环,直到发送方发送"exit"双方才能退出进程。
数据的传送是通过消息队列传送的。
具体对函数的介绍和实现方法这里就不多说了,信号量和消息队列的知识点还是有点多的,可以参考《linux程序设计》这本书,书上讲的很详细,例题也很好!
下面就贴上代码给大家参考参考!
发送代码:
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/sem.h>
#include <sys/msg.h>
#include <unistd.h>
#include <stdlib.h>
#define SIZE 128
struct msgbuf//消息的发送和接受要用到的结构体
{
long mtype;//消息的类型
char mtext[SIZE];//消息的数据
};
/*
*功能:发送消息
*参数1:信号量的ID
*参数2:消息的ID
*如果发送“exit”字符串,返回-1,其它返回0;
*/
int send(int sem_id, int msg_id)
{
struct msgbuf msg;
if ( request_sem(sem_id, 0) == -1 )//请求第一个信号量的资源
{
printf("request the frist semaphore failed!\n&