管道提升::iostreams没有任何输出
Pipes boost::iostreams don't have any output
我正在尝试使用带有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);
}
相关文章:
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 代码编译没有任何输出,入门程序
- 可能我知道为什么这段代码没有给出任何输出吗?
- 什么是现实中的"endl"(或任何输出操纵器)?它是如何实现的,它如何与操作员<<一起工
- 为什么下面的Hello World程序在PowerShell上没有显示任何输出?同一程序在CMD上显示正确的输出
- 执行此代码时,它不显示任何输出.为什么?
- 合并排序没有给我任何输出
- 编译器没有显示错误,但我没有得到任何输出.怎么了?
- 当我从头文件和实现文件调用我的函数到我的主文件时,我没有得到任何输出
- 为什么我在链表中插入的代码没有得到任何输出?
- 后缀Expressrion的插图未显示任何输出
- 不显示任何输出
- VS Code C++程序在调试时不显示任何输出
- 当我使用继续时,程序不提供任何输出
- 该代码在 Dev-C++ 中没有给我任何输出
- Cereal 找不到任何输出序列化函数
- C++ 中的侵蚀函数不给出任何输出
- Ocamlopt不会产生任何输出,只有错误代码
- 当我从java代码执行C++时不显示任何输出
- 这个看似无害的代码不会产生任何输出