Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在插座回路中使用管道_C++_Sockets_Loops_Pipe - Fatal编程技术网

C++ 在插座回路中使用管道

C++ 在插座回路中使用管道,c++,sockets,loops,pipe,C++,Sockets,Loops,Pipe,我创建了一个socket函数来启动一个进程,用数据填充它并获取返回值 void runAndPrint() { int fd[2], fout[2], num_bytes; int pid; char c, buf[10], buffer[100]; FILE *fp; pipe(fd); if((pid = fork()) == -1) return 1; if (pid == 0) {

我创建了一个socket函数来启动一个进程,用数据填充它并获取返回值

void runAndPrint()
{
    int fd[2], fout[2], num_bytes;
    int pid;
    char c, buf[10], buffer[100];
    FILE *fp;

    pipe(fd);
    if((pid = fork()) == -1)
        return 1;

    if (pid == 0)  
    {  
        while ((num_bytes = read(fileno(stdin), buffer, 1)) > 0){
            write(fd[1], buffer, num_bytes);            
        }
        printf("parent");
    }
    else
    {
        printf("child");
        close(fd[1]);
        dup2(fd[0], 0);
        close(fd[0]);

        pipe(fout);
        if((pid = fork()) == -1)
            return 1;

        if (pid == 0)  
        {
            close(fout[0]);
            dup2(fout[1], 1);
            close(fout[1]);
            execlp("base64", "base64", NULL);
        } 
        else
        {
            close(fout[1]);
            while((c = read(fout[0], buf, 10)) > 0)
            {
                printf("--- %.*s", c, buf);
            }
        }
    }

    return 0;
}
我需要在套接字上执行它

在那里我一边看书一边做。。写入fd[1]我将发送从套接字接收的数据。从我将发送回套接字的进程lol处理的数据

我的问题是:

int main(){
    try{ 
        TCPServerSocket servSock(echoServPort);
        for(;;){
            runAndPrint();
            HandleTCPClient(servSock.accept());
        }
    }
}
这只是一个例子


但是,在循环中,它只打印父零件而不打印子零件,这只是因为它在循环中。在处理孩子之前,我不知道如何保持runAndPrint过程。

似乎你混淆了父母和孩子。另外:在我看来它更像C(除了FunnyVariableNames),您还需要在printf()语句的末尾加一个\n,stdout是行缓冲的。谢谢,如果我把这段代码放在主进程上。它运行良好var名称没有规范化,因为我在web上使用示例编写了代码,我在修复管道后假装修复了它自己解决了问题。。问题是recv循环,只有当recv关闭时,它才会转到子级。。。现在我关闭并返回数据。