消息队列及管道

正好用到了,记下来

1. 消息队列

首先要定义符合要求的struct

typedef struct{
    int msg_type;
    char msg_data[128];
}MSG_DEF;

先来发送消息

MSG_DEF send_msg;
int key=8000, id;
id = msgget(key, IPC_CREAT | 0660);//不存在就创建,存在就返回
msgsnd(id, &send_msg, sizeof(send_msg.msg_data), 0);


再来接收消息

MSG_DEF recv_msg;
int key=8000, id;
id = msgget(key, IPC_CREAT | 0660);//不存在就创建,存在就返回
msgrcv(id, &recv_msg, sizeof(recv_msg.msg_data), 0, IPC_NOWAIT);//非阻塞

2. 管道

这里关注有名管道

先发送,注意open时模式的选择(O_NONBLOCK),可能会导致open file:: No such device or address,具体原因未细究

#define FIFO_SERVER "my_fifo"

unlink(FIFO_SERVER);
if(mkfifo(FIFO_SERVER, O_CREAT | O_RDWR | 0666) != 0)
    perror("mkfifo:");
fd = open(FIFO_SERVER, O_WRONLY);
if(fd< 0)
    perror("open file:");
ret = write(fd, filename, strlen(filename));
printf("send filename:[%s][%d]\n", filename, ret);
close(fd);

再来接收

char filename[128] = {0};
int fd = 0;
fd = open(FIFO_SERVER, O_RDONLY | O_NONBLOCK);
read(fd, filename, sizeof(filename));
printf("recv filename:[%s]\n", filename);
close(fd);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值