繁体   English   中英

将数据写入管道C ++

[英]Write data to pipe C++

我需要做类似的事情

echo "data" | cat

使用

echo "data" | my program

在我的程序内部调用了cat并将其stdin发送到cat stdin并从cat中获取了stdout。

我已经派生了该过程,关闭了写入和读取,将它们的dup2和execl。 “ ls -lahtr”,NULL)我可以获取文件列表作为输出。

但是我不知道如何发送数据,例如发送从标准输入读取的回显数据并发送到execl(“ / bin / sh”,“ sh”,“-c”,“ cat”,NULL)标准输入并返回我的回显字符串。

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sstream>
#include <iostream>

using namespace std;

int main()
{
    int ficheiro_fd;
    int pipe_fd[2];
    char buffer[20];
    int num_bytes;

    pipe(pipe_fd);

    switch ( fork() ) {
    case -1:
        exit(1);
    case 0:
        close(pipe_fd[1]);
        dup2(pipe_fd[0], 0);
        execlp("/usr/bin/base64"," ", NULL);
        break;
    default:
        close(pipe_fd[0]);
        //ficheiro_fd = open("output.txt", O_RDONLY);
    while ((num_bytes = read(fileno(stdin), buffer, 1)) > 0){
            write(pipe_fd[1], buffer, num_bytes);
            }
        close(pipe_fd[1]);
        wait((int*)getpid());
    }

    return 0;
}

有了这段代码,我可以向程序发送一些数据并将其写在屏幕上,我想知道如何获取标准输出并发送到一个变量。 感谢您的帮助。

派生之前,请使用两个pipe()调用。 这些将是您调用的进程的标准输入和标准输出。 分叉之后,在子进程中,将一个管道的写入端dup2送到stdout(1),将另一个管道的读取端dup2送到stdin(0)。 关闭管道的未使用端,然后执行您的过程。

在父进程中,关闭未使用的管道fds。 然后,您将获得一个与孩子的stdout对应的read()可以读取的fd,以及与孩子的stdin对应的可以写入的fd。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM