进程通信举例

进程通信举例

1剪贴板ClipBoard

2)窗口消息:

3文件映射(File Mapping):在32位系统中提供的新方法,可用来共享内存

4)远程数据写入/读取

5)管道(Pipe):用于设置应用程序间的一条永久通讯通道,通过该通道可以象自己的应用程序访问一个平面文件一样读写数据。

6)邮件槽(Mailslots):广播式通信,32系统中提供的新方法,可以在不同主机间交换数据,在 WIN9X下只支持邮件槽客户

7Windows套接字(Windows Socket):它具备消息管道所有的功能,但遵守一套通信标准使的不同操作系统之上的应 用程序之间可以互相通信。

数据发送端:


 

数据接收端:

 

### 三级标题:Linux 消息队列进程通信示例代码 消息队列是一种常见的进程通信机制,广泛应用于 Linux 系统中。它允许发送方将消息放入队列,接收方从队列中取出消息,从而实现异步通信和数据传递。下面是一个使用系统调用函数 `msgget`、`msgsnd` 和 `msgrcv` 实现的 Linux 消息队列通信示例。 #### 发送端代码 以下代码展示了如何创建一个消息队列,并向其中发送一条消息: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #define MSG_PATH "/home/gopher" #define MSG_ID 88 #define MSG_SZ 100 struct msgbuf { long mtype; char mtext[MSG_SZ]; }; int main() { key_t key = ftok(MSG_PATH, MSG_ID); if (key == -1) { printf("ftok()"); exit(EXIT_FAILURE); } int msgid = msgget(key, IPC_CREAT | 0666); if (msgid == -1) { printf("msgget()"); exit(EXIT_FAILURE); } struct msgbuf msg; msg.mtype = 101; strcpy(msg.mtext, "Hello, world!"); int ret = msgsnd(msgid, &msg, strlen(msg.mtext) + 1, 0); if (ret == -1) { printf("msgsnd()"); exit(EXIT_FAILURE); } return 0; } ``` #### 接收端代码 以下代码展示了如何从消息队列中接收消息: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #define MSG_PATH "/home/gopher" #define MSG_ID 88 #define MSG_SZ 100 struct msgbuf { long mtype; char mtext[MSG_SZ]; }; int main() { key_t key = ftok(MSG_PATH, MSG_ID); if (key == -1) { printf("ftok()"); exit(EXIT_FAILURE); } int msgid = msgget(key, 0666); if (msgid == -1) { printf("msgget()"); exit(EXIT_FAILURE); } struct msgbuf msg; int ret = msgrcv(msgid, &msg, MSG_SZ, 101, 0); if (ret == -1) { printf("msgrcv()"); exit(EXIT_FAILURE); } printf("Received message: %s\n", msg.mtext); return 0; } ``` 上述代码中,发送端通过 `msgget` 创建或获取消息队列,然后通过 `msgsnd` 向队列发送消息;接收端则通过 `msgget` 获取同一消息队列,并通过 `msgrcv` 接收指定类型的消息。这种方式实现了两个进程之间的简单通信[^4]。 在实际应用中,需要根据具体需求合理设计消息队列的大小、消息类型和权限设置等参数,以优化性能并避免资源浪费。此外,还需注意处理可能发生的错误,例如队列满、无可用资源等情况,确保系统的稳定性和可靠性[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值