簡體   English   中英

永久獲取C ++中運行的Shell命令的輸出

[英]Get permanently the output from a shell command running in C++

我想從shell命令(my_program)獲得輸出。 下面是采取了比如這個網站:

#include <iostream>
#include <stdio.h>

using namespace std;

int main() {
   FILE *in;
   char buff[512];

   if(!(in = popen("my_program", "r"))){
      return 1;
   }

   while(fgets(buff, sizeof(buff), in)!=NULL){
      cout << buff;
   }
   pclose(in);

   return 0;
}

問題:

我想永久運行程序並在程序仍在運行時獲取輸出,而不僅僅是從程序中獲取輸出。

任何想法?

提前致謝。

您的問題尚不清楚,但我懷疑問題是緩沖區和答案刷新:據我了解,程序my_program偶爾my_program生成輸出,並且當my_program打印某些內容時,您顯示的程序應my_program 此外,我懷疑該程序不會產生很多輸出,例如少於4k。

問題在於,大多數實現對標准輸出的緩沖取決於它是指向“控制台”還是其他東西:當寫入控制台輸出時,它傾向於行緩沖,而其他目標則緩沖更大的緩沖。 但是,可以顯式刷新緩沖區,從而大大降低輸出的性能。 當然,在上述情況下,您會對及時輸出而不是輸出性能更感興趣。

在C ++中刷新輸出緩沖區的一種簡單方法是使用out << std::flush 如果您想快速驗證這一問題,則可以使用out << std::unitbuf將流設置為在每次輸出操作后刷新。 有許多其他方法可以自動刷新,但是這些方法涉及更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM