Как читать данные из открытой трубы: нужен пример
Может ли кто-нибудь привести небольшой пример или направить меня к правильному материалу для чтения, чтобы решить следующую проблему:
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)
По сути, если вы не укажете параметр имени файла, вы считаете, что данные поступают из стандартного ввода. Так работает кошка.