Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Pavel Šlechta 29. 08. 2012, 10:23:43

Název: C++ vlastní stream
Přispěvatel: Pavel Šlechta 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
Název: Re:C++ vlastní stream
Přispěvatel: Waseihou 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
Název: Re:C++ vlastní stream
Přispěvatel: Waseihou 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/
Název: Re:C++ vlastní stream
Přispěvatel: Pavel Šlechta 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.
Název: Re:C++ vlastní stream
Přispěvatel: Pavel Šlechta 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.
Název: Re:C++ vlastní stream
Přispěvatel: korczis-anonymous 30. 08. 2012, 19:29:14
Ano, erlang zname a pouzivame...
Název: Re:C++ vlastní stream
Přispěvatel: Mirek Prýmek 30. 08. 2012, 19:35:02
Ano, erlang zname a pouzivame...

Erlang rulez :)