20 Şubat 2018 Salı

process ipstream Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/process.hpp>
Diğer uygulamanın çıktısını senkron olarak okumak için kullanılır. Eğer çıktıyı asenkron olarak okumak istersek async_pipe sınıfı kullanılır.

Constructor
Şöyle yaparız.
namespace  bp = boost::process;
bp::ipstream out;
gcount metodu
read() işlemi sonucunda okunan byte sayısnı verir.
Şöyle yaparız.
totalRead += out.gcount();
read metodu
Şöyle yaparız.
integer_type totalRead = 0;
char a[10240];
while (out.read(a,10240))
  totalRead += out.gcount();
Diğer
std::getline ile beraber kullanmak için şöyle yaparız.
std::vector<std::string> args { 
  "-c", 
  R"--(for a in one two three four; do
        sleep "$(($RANDOM%2)).$(($RANDOM%10))";
        echo "line $a";
       done)--" };

bp::ipstream output;
bp::child p("/bin/bash", args, bp::std_out > output);

std::string line;
while (std::getline(output, line)) {
  std::cout << "Received: '" << line << "'" << std::endl;
}
Çıktı olarak şunu alırız.
At 0.409434s Received: 'line one'
At 0.813645s Received: 'line two'
At 1.2179s Received: 'line three'
At 2.92228s Received: 'line four'

Hiç yorum yok:

Yorum Gönder