管道提升::iostreams没有任何输出

Pipes boost::iostreams don't have any output

本文关键字:任何 输出 iostreams 管道      更新时间:2023-10-16

我正在尝试使用带有boost库的管道,我只想执行一个后台程序(例如:ls)并将其输出为字符串(就像你可以使用fopen和fread一样),但我真的不明白为什么我没有输出这个代码:

#include <iostream>
#include <cstdio>
#include <sstream>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/device/file_descriptor.hpp>
int
main(int argc, char** argv)
{
    using namespace boost::iostreams;
    if(argc < 2)  {
        return -1;
    }
    FILE* p = popen(argv[1], "r");
    if(! p)  {
        std::cerr << "error open pipe" << std::endl;
        return -2;
    }
    int fd = fileno(p);
    std::stringstream ss;
    ss << fd;
    std::string s = ss.str();
    file_descriptor_source pdesc(s);
    stream_buffer<file_descriptor_source> pstream(pdesc);
    std::istream is(&pstream);
    std::string out;
    while(is)  {
        std::getline(is, out);
        std::cout << out << std::endl;
    }
    pstream.close();
    pdesc.close();
    pclose(p);
    return 0;
}

提前谢谢。

您似乎正试图从包含文件描述符编号的"路径"打开boost::file_descriptor_source。但是,这个名称的文件可能不存在。你可能想使用的是这样的东西:

if (FILE* p = popen(argv[1], "r")) 
{
    boost::iostreams::file_descriptor_source d(fileno(p), boost::iostreams::close_handle);
    boost::iostreams::stream_buffer<boost::iostreams::file_descriptor_source> pstream(d);
    std::cout << &pstream;
    pclose(p);
}