Saya perlu bantuan menutup pipa bernama. Saya membuat fifo bernama via mkfifo myfifo
, kemudian beberapa file yang dapat dieksekusi C ++ menulis / membaca dari myfifo
, dan sekarang saya ingin menutupnya (jadi saya bisa cat
isinya untuk membacanya).
Namun, saya membaca man mkfifo
halaman, dan juga googled sekitar, tetapi saya tidak dapat menemukan perintah khusus untuk menutup fifo (bahkan setelah semua executable selesai menggunakannya).
Perintah yang terlibat adalah:
$ mkfifo myfifo
$ ./A < myfifo | ./B > myfifo
$ # now i want to read myfifo
(executable A
dan B
berinteraksi satu sama lain melalui myfifo
)
Ini adalah file
// B.cpp
#include <fstream>
#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
using namespace std;
int main()
{
ofstream file("inter.txt");
int in = -1;
if (file.is_open())
{
cin >> in;
cout << (in + 1);
}
else
cout << -1;
file << in;
file.close();
return 0;
}
// A.cpp
#include <fstream>
#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
using namespace std;
#define PIPE "pipe.txt"
#define MAX_BUF 150
int main()
{
ofstream file("inter2.txt");
cout << 1 << endl;
file << 1;
int in;
cin >> in;
cout << 2 * in;
file << 2 * in;
file.close();
return 0;
}
Dalam program di atas, ini seharusnya terjadi: A output 1. B membaca 1 dan output 2. A membaca 2 dan output 4. Kemudian program berakhir.
./A
atau./B
.Jawaban:
Ini adalah bahwa setelah konten FIFO dikonsumsi, mereka tidak akan tetap berada di FIFO. Dengan demikian, tidak mungkin untuk mencetak semua konten FIFO nanti (hanya mereka yang tidak dikonsumsi yang akan tetap).
Satu-satunya cara untuk mengetahui apa yang sedang dikirim ke FIFO adalah mencetak hal yang sama ke file yang terpisah (mungkin membebani operator penyisipan aliran
<<
).sumber