gpt4 book ai didi

c++ - 管道 boost::iostreams 没有任何输出

转载 作者:行者123 更新时间:2023-11-30 04:28:52 24 4
gpt4 key购买 nike

我正在尝试将管道与 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);
}

关于c++ - 管道 boost::iostreams 没有任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com