| 1 | #include <boost/iostreams/device/file_descriptor.hpp>
|
|---|
| 2 | #include <boost/iostreams/filtering_stream.hpp>
|
|---|
| 3 | #include <boost/iostreams/get.hpp>
|
|---|
| 4 | #include <iostream>
|
|---|
| 5 | #include <Windows.h>
|
|---|
| 6 |
|
|---|
| 7 | using namespace boost::iostreams;
|
|---|
| 8 |
|
|---|
| 9 | int main()
|
|---|
| 10 | {
|
|---|
| 11 | HANDLE handles[2];
|
|---|
| 12 | SECURITY_ATTRIBUTES sa;
|
|---|
| 13 | ZeroMemory(&sa, sizeof(sa));
|
|---|
| 14 | sa.nLength = sizeof(sa);
|
|---|
| 15 | CreatePipe(&handles[0], &handles[1], &sa, 0);
|
|---|
| 16 |
|
|---|
| 17 | char buffer[2] = { 'a', 'b' };
|
|---|
| 18 | DWORD written;
|
|---|
| 19 | WriteFile(handles[1], buffer, 2, &written, NULL);
|
|---|
| 20 | CloseHandle(handles[1]);
|
|---|
| 21 |
|
|---|
| 22 | file_descriptor_source source(handles[0], close_handle);
|
|---|
| 23 | filtering_istream is;
|
|---|
| 24 | is.push(source);
|
|---|
| 25 |
|
|---|
| 26 | std::cout << get(is) << std::endl; // 97
|
|---|
| 27 | std::cout << get(is) << std::endl; // 98
|
|---|
| 28 | std::cout << get(is) << std::endl; // should be: -1 (but is 0)
|
|---|
| 29 | std::cout << get(is) << std::endl; // -1
|
|---|
| 30 | }
|
|---|