C++ vlastní stream

C++ vlastní stream
« kdy: 29. 08. 2012, 10:23:43 »
Dobrý den,
potřeboval bych poradit jak v C++ vytvořit svoji vlastní třídu implementující input i output stream.
Jde o to, že zapisuji a čtu s Windows Pipe a pod linuxem ze SOCK_UNIX typu SOCK_STREAM. Bohužel nelze se tvářit tak, že socket je pod unixem soubor, protože tam ještě řeším timeouty a synchronizaci mezi thready, takže žádnej <fstream>.
Vím, že určitě potřebuji vlastní kód při operator>> a operator<< otázkou tedy je:
  1) z jaké třídy mám nejlépe dědit
  2) které ostatní metody kromě těch operátorů potřebuji implementovat.

Děkuji.

PS: C++ streamy jsou jedna z věcí, které jsem ještě tak úplně nepochopil, takže mějte strpení, jestli jsem nahoře napsal nějakou blbost


Waseihou

Re:C++ vlastní stream
« Odpověď #1 kdy: 29. 08. 2012, 12:08:31 »
Zkus se mrknout na streamy z boost, ta knihovna je de facto standard pro C++ a snaží se být platformně nezávislá:

http://www.boost.org/doc/libs/1_51_0/libs/iostreams/doc/index.html

Waseihou

Re:C++ vlastní stream
« Odpověď #2 kdy: 29. 08. 2012, 12:14:15 »
Boost.Asio contains classes to allow asynchronous read and write operations to be performed on Windows HANDLEs, such as named pipes.
http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio/overview/windows/stream_handle.html

nevím, jestli ti to k něčem bude, možná ještě něco najdeš v asio
projdi si boost celý jestli něco nenajdeš:
http://www.boost.org/doc/libs/1_51_0/

Re:C++ vlastní stream
« Odpověď #3 kdy: 30. 08. 2012, 18:43:35 »
Sakra, asio znam a nekolikrat jsem v nem uz delal, bohuzel mi uniklo, ze to umi i windows-pipe, coz jsem se prave ted dozvedel. Situaci je takova, ze to mam napsane  one-thread per client i s timeouty a automatickym pripojovanim (join) threadu. (Memory leaky zatim zadne, testovano ve Valgrindu). Mam tam funkci send(),  a received() momentalne je delanej jako callback (zdedena trida a ciste virtualni funkce). Jde o to, ze by se mi hodilo, aby se to chovalo jako stream misto toho send() a received().

Jinak to Boost.Iostreams urcite zkouknu. Vypada to slibne.

PS: Kdyz uz jsme u knihovny asio, znate taky Erlang? Uzasny paralelne asynchronni jazyk.

Re:C++ vlastní stream
« Odpověď #4 kdy: 30. 08. 2012, 18:45:05 »
Jo asi jsem zapomněl dodat, ze je to delane multi-platformě.
Takže to pod linuxem to jede jako SOCK_UNIX a pod windowsem jako pipe. To jenom abyste se nedivili, ze jsem to testoval ve Valgrindu.


korczis-anonymous

Re:C++ vlastní stream
« Odpověď #5 kdy: 30. 08. 2012, 19:29:14 »
Ano, erlang zname a pouzivame...

Re:C++ vlastní stream
« Odpověď #6 kdy: 30. 08. 2012, 19:35:02 »
Ano, erlang zname a pouzivame...

Erlang rulez :)