Как читать данные из открытой трубы: нужен пример

Может ли кто-нибудь привести небольшой пример или направить меня к правильному материалу для чтения, чтобы решить следующую проблему:

    ls | ./myprog

Я хотел бы добиться, чтобы моя программа считывала информацию с ls и просто выводила ее на экран.

Мне нужен пример C++, и, если возможно, сделать это через Boost Lib

Thnx

PS

Спасибо всем, что сработало

1 ответ

Этот код точно соответствует вашей проблеме:

#include <iostream>

using namespace std;

    int main()
{ 
while (true)
    {
        string x;
        cin >> x;
        cout << x << endl;
    }
}

вы должны поместить этот код в свой cpp-файл "myprog" и затем ввести указанную вами команду. Он просто помещает ввод из программы ls на ваш экран

В C все, что вам нужно сделать, это прочитать дескриптор файла 0:

read(0, …, …);

В C++ вы можете сделать это с помощью std::cin:

#include <iostream>
int main() {
    std::cin >> /* a variable you want to direct the input to */
    return 0;
}

Это стандартный C++, который полностью совместим с boost. Что касается того, как его использовать, я оставляю это вам, чтобы прочитать больше о руководстве и множестве примеров, которые вы можете найти в Интернете.


для открытия файла или чтения из stdin вы можете сделать что-то следующим образом:

shared_ptr<istream> input;
if (filename == "-" || filename == "")
    input.reset(&cin, [](...){});
else
    input.reset(new ifstream(filename.c_str()));

// ...

(ответ скопирован с /questions/21062947/c-naznachit-cin-peremennoj-ifstream/21062962#21062962)

По сути, если вы не укажете параметр имени файла, вы считаете, что данные поступают из стандартного ввода. Так работает кошка.

Другие вопросы по тегам