首页 > 解决方案 > 管道之间的迭代通信

问题描述

我想使用管道编写代码。这段代码是关于石头、剪刀、纸的游戏,所以我需要一直询问和接收消息,直到两个玩家中的一个得分 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;
    
}

标签: cunix

解决方案


推荐阅读