Fórum Root.cz
		Hlavní témata => Vývoj => Téma založeno: 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
			 
			
			- 
				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
			 
			
			- 
				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/
			 
			
			- 
				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.
			 
			
			- 
				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.
			 
			
			- 
				Ano, erlang zname a pouzivame...
			
 
			
			- 
				
Ano, erlang zname a pouzivame...
Erlang rulez :)