То, что я хочу сделать:работа с ФИФО в C++ (блокирование чтения)
1.Create и открыт для записи in.fifo по process1
2.Open in.fifo для чтения в Process2
3.Write от CIN до in.fifo по линии Process1
4.Read и соиЬ линии от Process2
5.When входного "выхода" на Cin (Process2), он закрыт файл in.fifo, удалите его и выйдите из
6.process2 выход, потому что in.fifo не имеет ни один писатель
В моих программах Process2 не выходит. В с он работает с чтения, записи, когда O_NONBLOCK понятно, но я хочу сделать это в C++
write.cpp:
#include <stdlib.h>
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int main(){
std::ofstream fifo;
fifo.open("/home/fedor/projects/fifo2/in",ios::out);
if(! fifo.is_open()){
std::cout << " error : cannot open file " << std :: endl;
return 1;
}
std::cout << " file open " << std :: endl;
std::string line;
while (line.compare("exit") != 0){
std::getline(cin, line);
fifo << line << endl;
/* do stuff with line */
}
fifo.close();
remove("/home/fedor/projects/fifo2/in");
return 0;
}
read.cpp:
#include <stdlib.h>
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int main(){
std::ifstream fifo;
fifo.open("/home/fedor/projects/fifo2/in",ifstream::in);
if(! fifo.is_open()){
std::cout << " error : cannot open file " << std :: endl;
return 1;
}
std::cout << " file open " << std :: endl;
std::string line;
bool done = false;
while (!done)
{
while (std::getline(fifo, line))
{
cout << line << endl;
/* do stuff with line */
}
if (fifo.eof())
{
fifo.clear(); // Clear the EOF bit to enable further reading
}
else
{
done = true;
}
}
return 0;
}
Я могу» t найти, где я могу прочитать о блокировке чтения с помощью потоков, таких как http://linux.die.net/man/3/read о блокировке, прочитанной
Если процесс2 закрыт, если вход «выход», как process1 - это блокировка жизни? (Блокируется ли это чтение или просто пытается и пытается прочитать)
Спасибо за ваш ответ! У меня есть программа на c, которая работает, как я хочу. Как я могу использовать такие функции, как open() в C++? – fedden
@fedden Просто используйте их, как в C. –
Спасибо, все работает. В C++ нужно включить несколько разных libs :)) – fedden