lxuegithub / AsyncStreamCopyCPP

A simple crossplatform c++ implementation of copying one stream to another asynchronously, typically for IO (netowork/file/usb/etc) access.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Async Stream-Copy CPP

What

This is a simple crossplatform c++ implementation of copying one stream to another asynchronously, typically for IO (netowork/file/usb/etc) access. It consists of only two files (.cpp/.h).

Why

There are many great stackoverflow questions (such as [this] (http://stackoverflow.com/questions/1540658/net-asynchronous-stream-read-write) one) that give good examples on how to asyncrously read from one stream, and asyncrounously write to another. However, I couldn't find anyone proposing a solution to the same problem, but for c++.

This is really needed for doing IO access to custom locations. Sure, windows has the FILE_FLAG_OVERLAPPED support, but what about when the source/destination is something the OS knows nothing about?

Use case

A good use case would be copying a file to an iOS device (using libimobiledevice). The write operation to iOS over USB is slow. Synchronously, this problem gets worse because between each write, you have to read from the file system. If done asynchronously, we can ensure that the write operation has a continous stream of bytes that have been read from another thread. The copy performance improves greatly when doing this asynchronously.

Supported environments

  • Windows
  • Linux*
  • Mac*

* This implementation has currently only been tested using Windows. Please, feel free to use it on Linux/Mac and let me know how it works. Bonus points if you submit a pull-request!

About

A simple crossplatform c++ implementation of copying one stream to another asynchronously, typically for IO (netowork/file/usb/etc) access.

License:MIT License


Languages

Language:C++ 100.0%