c - 管道之间的迭代通信
问题描述
我想使用管道编写代码。这段代码是关于石头、剪刀、纸的游戏,所以我需要一直询问和接收消息,直到两个玩家中的一个得分 3。到目前为止,我有以下代码,但我不知道如何迭代这段代码,可能需要一段时间的迭代?
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#define READ_END 0 /* index pipe extremo escritura */
#define WRITE_END 1 /* index pipe extremo lectura */
int main(int argc, char* argv[])
{
int fd1[2],fd2[2];
int status, pid;
pipe(fd1); /* comunica ls y grep */
pid = fork();
if(pid == 0) /* hijo 1*/
{
close(fd1[READ_END]); /* cerrar extremo no necesario */
dup2(fd1[WRITE_END], STDOUT_FILENO);
close(fd1[WRITE_END]);
}
else /* padre */
{
close(fd1[WRITE_END]); /* extremo no necesario ya */
pipe(fd2); /* comunica grep y wc */
pid = fork();
if(pid == 0) /* hijo 2 */
{
close(fd2[READ_END]); /* cerrar extremo no necesario */
dup2(fd1[READ_END], STDIN_FILENO);
close(fd1[READ_END]);
dup2(fd2[WRITE_END], STDOUT_FILENO);
close(fd2[WRITE_END]);
}
else /* padre */
{
close(fd1[READ_END]); /* cerrar extremo no necesario */
close(fd2[WRITE_END]); /* cerrar extremo no necesario */
}
}
close(fd2[READ_END]); /* cerrar extremo que queda abierto en el padre */
/* wait para cada hijo */
wait(&status);
wait(&status);
return 0;
}
解决方案
推荐阅读
- c# - 在 CassandraCSharpDriver.Graph 中使用 SimpleGraphStatement 的树查询抛出“无法转换为 org.apache.tinkerpop.gremlin.structure.Element”
- fusioncharts - 更改 FusionChart 地图需要去掉颜色范围滑块中的橙色背景色
- php - 使用 php mail() 发送多个附件
- aws-cdk - 如何测试 CDK 上下文键是否存在?
- java - Spring hatoas 和 java 8:我是否被迫抛出异常?
- spring-boot - 如何更新 JHipster 中的实体而不丢失以前的逻辑工作?
- python-3.x - 如何避免 tkinter 窗口最大化?
- algorithm - 我需要一种算法,既能找到最少的颜色来为图形着色,又能确保没有两个相邻顶点具有相同的颜色
- javascript - 在条形图顶部显示计数 - ChartJS
- c++ - 导出的模板类实例化导致 msvc 编译错误