abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 16:00 | Nová verze

Byl vydán Mozilla Firefox 51.0. Z novinek lze upozornit například na upozorňování na přihlašování přes nešifrované spojení (HTTP), podporu pro přehrávání bezeztrátového formátu FLAC nebo podporu WebGL 2. Podrobné informace v poznámkách k vydání a na stránce věnované vývojářům. Řešeny jsou také bezpečnostní chyby.

Ladislav Hagara | Komentářů: 1
včera 17:25 | IT novinky

Do prodeje (Farnell) se dostal jednodeskový počítač Tinker Board (unboxing). Jedná se o konkurenci Raspberry Pi 3 od společnosti Asus. Porovnání (jpg) těchto počítačů například na CNXSoft. Cena Tinker Boardu je 55 £.

Ladislav Hagara | Komentářů: 15
včera 14:44 | Zajímavý projekt

Byla zveřejněna pravidla hackerské soutěže Pwn2Own 2017, jež proběhne od 15. do 17. března v rámci bezpečnostní konference CanSecWes ve Vancouveru. Soutěžit se bude o více než milion dolarů v pěti kategoriích. Letos se bude útočit i na Ubuntu. Jedná se již o 10. ročník této soutěže.

Ladislav Hagara | Komentářů: 2
včera 13:33 | Nová verze

Po sedmi měsících vývoje od vydání verze 5.7 byla vydána verze 5.8 (YouTube) toolkitu Qt. Z novinek lze zmínit například Qt Lite pro vestavěná zařízení. Nově jsou plně podporovány moduly Qt Wayland Compositor (YouTube) a Qt SCXML (YouTube). Současně byla vydána verze 4.2.1 integrovaného vývojového prostředí (IDE) Qt Creator.

Ladislav Hagara | Komentářů: 1
včera 11:52 | Pozvánky

Lednový Prague Containers Meetup se koná ve čtvrtek 26. ledna 2017 od 18:00 v Apiary, Pernerova 49, Praha 8. Přijďte se podívat na přednášky o Enterprise Kubernetes a Jenkins as a code.

little-drunk-jesus | Komentářů: 0
včera 11:40 | Pozvánky

Program letošního ročníku konference Prague PostgreSQL Developer Days, která se koná již 15. a 16. února 2017 na ČVUT FIT, Thákurova 9, Praha 6, byl dnes zveřejněn. Najdete ho na stránkách konference včetně anotací přednášek a školení. Registrace na konferenci bude otevřena zítra (24. ledna) v brzkých odpoledních hodinách.

TomasVondra | Komentářů: 0
22.1. 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
22.1. 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (12%)
 (2%)
 (72%)
 (3%)
 (11%)
Celkem 395 hlasů
 Komentářů: 39, poslední dnes 19:30
Rozcestník
Reklama

Dotaz: Záměna souboru za standartní vstup v C++

Martin Tůma avatar 22.8.2006 21:59 Martin Tůma | skóre: 38 | blog: RTFM | Praha
Záměna souboru za standartní vstup v C++
Přečteno: 669×

Lze v C++ pomocí nějakého proudu provést to, co lze takto jednoduše implementovat v C:

int main (int argc, char *argv[]) {
  FILE *fp

  if (argc == 1)
    fp = stdin;
  else
    fp = fopen(argv[1], "r");


  /* tady uz pracuji s fp nezavisle na tom
     odkud beru data */

  c = fgetc(fp)
  ...

Tzn. jak pomocí jednoho proudu neformátovaně číst data, ať už je vstupem standartní vstup nebo nějaký soubor?

Každý má právo na můj názor!

Odpovědi

kozzi avatar 22.8.2006 22:17 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Záměna souboru za standartní vstup v C++
no urcite to ma svoji funkci ale klidně muzes pouzit tuto
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
22.8.2006 22:29 machr | skóre: 2 | blog: machr
Rozbalit Rozbalit vše Re: Záměna souboru za standartní vstup v C++
#include <iostream>
#include <fstream>

int main(int argc, char **argv) {
	std::istream *_fp;
	
	if(argc == 1)
		_fp = &std::cin;
	else
		_fp = new std::ifstream(argv[1]);

	std::istream &fp = *_fp;

	/* tady pracuju s fp jako s objektem istream */

	int i;
	fp >> i;


	...
(__) (oo) /-------\/ / | || * ||----|| ~~ ~~
22.8.2006 23:00 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Záměna souboru za standartní vstup v C++

Neměl byste pak ale zapomínat ten stream po sobě zlikvidovat, takže by to chtělo nějaký příznak, zda se to má udělat. Nebo by šlo použít něco jako

#include <iostream>
#include <fstream>
#include <stdexcept>

void process_stream(std::istream& fs)
{
  std::cout << fs.rdbuf();
}

int main(int argc, char* argv[])
{
  int ret = 0;
  if (argc < 2) {
    process_stream(std::cin);
  } else {
    for (int i=1; i<argc; i++) {
      std::ifstream fs(argv[i]);
      if (!fs) {
        std::cerr << "error: cannot open file " << argv[i] << std::endl;
        ret = 1;
        continue;
      }
      process_stream(fs);
    }
  }
  return ret;
}
22.8.2006 23:02 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Záměna souboru za standartní vstup v C++
Případně je v záloze metoda hrubého násilí: použít dup2() :-)
Martin Tůma avatar 22.8.2006 23:36 Martin Tůma | skóre: 38 | blog: RTFM | Praha
Rozbalit Rozbalit vše Re: Záměna souboru za standartní vstup v C++

Díky všem za náměty, nakonec to nebude koukám tak složitý. Nicméně systém streamů v C++ musel navrhovat chovanec Guatemalského ústavu pro choromyslné...

Každý má právo na můj názor!
22.8.2006 23:48 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Záměna souboru za standartní vstup v C++
Proč myslíte?
Martin Tůma avatar 22.8.2006 23:53 Martin Tůma | skóre: 38 | blog: RTFM | Praha
Rozbalit Rozbalit vše Re: Záměna souboru za standartní vstup v C++

V porovnání s céčkovským FILE * mi systém streamů v C++ přijde zbytečně složitý. Nicméně netvrdím, že pokud člověk do tohoto systému pronikne, nemůže být mocným nástrojem...

Každý má právo na můj názor!
23.8.2006 00:27 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Záměna souboru za standartní vstup v C++

Ono je to složité hlavně na pohled. Když se to ale naučíte používat, udělá to strašně moc práce za vás. Viz třeba můj oblíbený

#include <iostream>
#include <locale>

int main(int argc, char* argv[])
{
  if (argc != 3) return 1;
  std::ios_base::sync_with_stdio(false);
  std::wcin.imbue(std::locale(argv[1]));
  std::wcout.imbue(std::locale(argv[2]));
  std::wcout << std::wcin.rdbuf();
  return 0;
}

(error handling si udělá laskavý čtenář za cvičení)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.