如何在c中打开双向管道

如何在c中打开双向管道,c,unix,C,Unix,如何打开si中的读写管道?popen函数只能在单向模式下打开,我需要在sCom take命令中以php获取程序的输出 void pcreate(char* com, int* fdin_, int* fdout_) { pid_t pid; int pipe_in[2]; int pipe_out[2]; pipe(pipe_in); pipe(pipe_out); pid = fork()

如何打开si中的读写管道?popen函数只能在单向模式下打开,我需要在s

Com take命令中以php获取程序的输出

 void pcreate(char* com, int* fdin_, int* fdout_)
    {
        pid_t pid;
        int pipe_in[2];
        int pipe_out[2];
        pipe(pipe_in);
        pipe(pipe_out);
        pid = fork();
        if (pid > 0)
        {
            close(pipe_in[0]);
            close(pipe_out[1]);
            *fdin_ = dup(pipe_in[1]);
            *fdout_ = dup(pipe_out[0]);
        }
        else if (pid == 0 )
        {
            close(pipe_in[1]);
            close(pipe_out[0]);
            dup2(pipe_in[0], 0);
            dup2(pipe_out[1], 1);

            int size = 2;
            int comlenght = (int)strlen(com);
            for (int i = 0; i < comlenght; i++)
            {
                if (com[i] == ' ')
                    size++;
            }
            char* args[size];
            comparse(com, args, size);
            if (execvp(args[0], args) < 0)
                _exit(0);
        }
    }

    void comparse(char* com, char* args[], int comlenght)
    {

        long del = 0;

        char *com1 = com;
        char *com2 = com1;
        for (int i = 0; i < comlenght - 1; i++)
        {
            com2 = strstr(com1, " ");
            if (com2 == NULL)
                del = (long)strlen(com1);
            else
                del = com2 - com1;
            args[i] = malloc((unsigned)(del+1) * sizeof (char));
            args[i][del] = '\0';
            strncpy(args[i], com1, (unsigned)del);
            com1 = com2 + 1;

        }
        args[comlenght - 1] = NULL;
    }
void pcreate(char*com,int*fdin,int*fdout)
{
pid_t pid;
[2]中的int pipe_;
int pipe_out[2];
管道(管道内);
管道(管道输出);
pid=fork();
如果(pid>0)
{
关闭(管道_in[0]);
关闭(管道[1]);
*fdin_uu=dup(管道[1]);
*fdout=dup(管道输出[0]);
}
否则如果(pid==0)
{
关闭(第[1]条中的管道);
关闭(管道输出[0]);
dup2(管道u在[0]中,0);
dup2(管道输出[1],1);
int size=2;
int comlenght=(int)strlen(com);
对于(int i=0;i
管道确实不适合双向通信;打开两个管道,或使用
socketpair()
。管道是单向的。您可以获得两个单独的管道,每个方向一个,或者(更好!)获得一个插座。您可以在C中使用socketpair()来获得一对连接的套接字。