char *a;
long long int dlzka;
do
{
a= (char*) malloc (dlzka++*sizeof(char));
if ((read(STDIN_FILENO,a,1)) >0)
;
else
break ;
}
while (1);
read(STDIN_FILENO,a,dlzka);
Ja viem ze je to zle ale skuste niekto poradit ako nacitat aj x GB-ovi vstup (pomocou funkcie read) ? Da sa nejako nastavit aby funkcia read vzdy pri zavolani nacitala od zaciatku vstupu ?
1. Ta funkcia read je z ktorej kniznice? (predpokladam, ze unistd.h)
2. Vzdy chces citat od zaciatku? Tak pouzi lseek(STDIN_FILENO, 0, SEEK_SET); To ta nastavi na zaciatok suboru.
2. Preco nepouzivas funkcie z stdio.h?
Bud sme sa nepochopili alebo tvoje riesenie je nespravne . takto(teraz mam nieco nove) mam cyklus v ktorom pouzivam read(na citanie vstupu) po 1 znaku az na koniec vstupu a ak skoncim cyklus tak chcem aby read zacal citat znaky zase od zaciatku vstupu.
Hm... no ja Ti neviem, ale ked chces resetovat miesto, kde si v subere tak pouzi seek, v unistd kniznici sa ta funkcia vola lseek, preto som sa pytal, ze odkial ten read je. Ak je to ina kniznica, tak sa moze funkcia na seek volat inak (v stdio je to fseek).
Tak to mas unistd. Preto bude fungovat funkcia lseek ako som pisal vyssie. Ale uz viem, kde je asi problem. STDIN_FILENO sa pravdepodobne neda seekovat. A teda ani nie je sanca ako sa dostat znova na zaciatok (toto plati ak je STDIN_FILENO vstup z klavesnice).
Len tak mimochodom a= (char*) malloc (dlzka++*sizeof(char)); v cykle, kde a nikdy nefreeujes je obrovsky memory leak.
Tak sanci je vela, ulozis si ho cely do pamate, alebo si vytvoris subor do ktoreho budes obsah STDIN_FILENO kopirovat... zalezi od toho naco to chces a ake velke vstupy budes pouzivat.
Nie ziadne subory nechcem vytvarat mam iba problem ze na vstup(klavesnica) dostanem x GB vstup a neviem ho nacitat pomocou read
Mozno vedel by som o rieseni ale to by som pouzil strasne vela pamate a to ja nedopustim sice je pravda ze sa s tym ser.. uz dost dlho ale asi si treba na to iba poriadne sadnut a skusat a googlti btw nevies o niecom co by mi pomohlo ?
Myslim, ze ti googlenie prilis nepomoze. Vstup z klavesnice nikdy nebol mysleny na nacitavanie radovo GB. Ak to potrebujes citat viackrat tak ma nic ine ako vytvorit docasny subor nenapada. Predsalen do pamate to nenarves a na konzole sa neda seekovat.
Uplne isty som si neni (linux nepouzivam), ale pravdepodobne to nie je to iste. Tvari sa to ako file descriptor, ale rozdiely tam su (napr. spominany seek).