编写C程序,使用Linux中的IPC机制实现"石头、剪刀、布的游戏。
时间: 2024-09-18 22:13:38 浏览: 18
在Linux中,我们可以利用IPC (Inter-Process Communication)机制,如管道(pipe)、消息队列(msgqueue)、信号量(semaphore)或者共享内存(shared memory)来实现在两个进程间玩“石头、剪刀、布”的游戏。这里我们选择简单易用的消息队列作为例子,因为它们适合于传递数据和同步通信。
首先,创建一个服务器端(game_server.c)和一个客户端(game_client.c):
**game_server.c**
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define KEY 999
#define MSG_SIZE 10
struct game_msg {
char player_move[MSG_SIZE];
char computer_move[MSG_SIZE];
};
int main() {
int msg_key = key_t(KEY);
struct msgbuf *msg = (struct msgbuf *)malloc(sizeof(struct game_msg));
msg->msg_name = NULL;
msg->msg_type = 0;
msg->msg_len = sizeof(struct game_msg);
msg->msg_control = NULL;
if (msgget(msg_key, IPC_CREAT | 0644) == -1) {
perror("msgget failed");
exit(1);
}
while (1) {
printf("Enter your move (rock/paper/scissors): ");
fgets(msg->msg.buf, MSG_SIZE, stdin);
msg->msg.buf[strlen(msg->msg.buf)-1] = '\0'; // remove newline
msgsnd(msg_key, msg, msg->msg_len, 0); // send message to client
}
return 0;
}
```
**game_client.c**
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define KEY 999
int main() {
int msg_key = key_t(KEY);
struct game_msg msg;
memset(&msg, 0, sizeof(msg));
if (msgrcv(msg_key, &msg, sizeof(msg), 0, 0) == -1) {
perror("msgrcv failed");
exit(1);
}
printf("Computer chose: %s\n", msg.computer_move);
// Compare moves and print result here
// ...
return 0;
}
```
在这个示例中,服务器端等待用户的输入,并发送给客户端。客户端接收到消息后处理计算机的选择并返回结果。
运行时,先启动服务器(`./game_server`),然后启动客户端(`./game_client`)。注意,这只是一个基本框架,实际游戏中你需要添加用户与电脑的交互判断以及游戏规则的具体实现。