71 lines
2.0 KiB
C++
71 lines
2.0 KiB
C++
#include <iostream>
|
|
#include <thread>
|
|
#include <fstream>
|
|
#include <chrono>
|
|
#include <syncstream>
|
|
|
|
void writer() {
|
|
std::osyncstream(std::cout) << "Writer started" << std::endl;
|
|
|
|
char *buffer = new char[8192];
|
|
|
|
for (int i = 0; i < 8192; ++i) {
|
|
buffer[i] = static_cast<char>((i % 95) + 32); // Printable range
|
|
}
|
|
|
|
FILE *fl = fopen("/dev/wendy_in", "w");
|
|
if (!fl) {
|
|
std::osyncstream(std::cerr) << "Cannot open wendy_in" << std::endl;
|
|
}
|
|
|
|
int wrote = 0;
|
|
wrote = fwrite(buffer, sizeof(char), 8192, fl);
|
|
if (wrote < 0) {
|
|
std::osyncstream(std::cerr) << "Write error: " << wrote << std::endl;
|
|
}
|
|
std::osyncstream(std::cout) << "Wrote " << wrote << std::endl;
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
|
wrote = fwrite(buffer, sizeof(char), 8192, fl);
|
|
if (wrote < 0) {
|
|
std::osyncstream(std::cerr) << "2nd write error: " << wrote << std::endl;
|
|
}
|
|
std::osyncstream(std::cout) << "2nd wrote " << wrote << std::endl;
|
|
}
|
|
|
|
void reader() {
|
|
std::osyncstream(std::cout) << "Reader started" << std::endl;
|
|
FILE *fl = fopen("/dev/wendy_out", "r");
|
|
if (!fl) {
|
|
std::osyncstream(std::cerr) << "Cannot open wendy_out" << std::endl;
|
|
return;
|
|
}
|
|
|
|
char *buffer = new char[257];
|
|
|
|
int read = 0;
|
|
int total_read = 0;
|
|
do {
|
|
read = fread(buffer, sizeof(char), 100, fl);
|
|
if (read <= 0) {
|
|
break;
|
|
}
|
|
total_read += read;
|
|
std::osyncstream(std::cout) << "Read " << read << "bytes, content: " << buffer << ", total " << total_read << std::endl;
|
|
} while (1);
|
|
|
|
std::osyncstream(std::cout) << "Read failed: read = " << read << std::endl;
|
|
}
|
|
|
|
int main() {
|
|
std::thread reader_thread(reader);
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
std::thread writer_thread(writer);
|
|
if (reader_thread.joinable()) {
|
|
reader_thread.join();
|
|
}
|
|
if (writer_thread.joinable()) {
|
|
writer_thread.join();
|
|
}
|
|
return 0;
|
|
} |