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í
×
    včera 23:00 | Nová verze

    Poštovní klient Thunderbird byl vydán v nové verzi 153 s kódovým názvem Meadow. Jedná se o ESR (Extended Support Release) vydání. Přehled novinek v poznámkách k vydání. Vylepšuje OAuth. Thundermail lze používat bez instalace doplňku.

    Ladislav Hagara | Komentářů: 0
    včera 22:22 | Zajímavý článek

    AI tento rok naplno vtrhla do vývoje softwaru a výrazně ovlivňuje také open source projekty. Jiří Eischmann v příspěvku Jak mění AI open source na svém blogu rozebírá několik trendů, které v open source v poslední době v souvislosti s AI pozoruje, a jak tyto trendy svět otevřeného softwaru mění (Inflace projektů, Zahlcení kontroly, Klesající motivace zveřejňovat kód).

    Ladislav Hagara | Komentářů: 2
    včera 22:00 | IT novinky

    Evropská komise (EK) vyměřila americké internetové společnosti Google pokutu 890 milionů eur (21,5 miliardy Kč) za porušení unijního nařízení o digitálních trzích (DMA). Firma se podle unijní exekutivy provinila tím, že ve vyhledávači Google Search upřednostňovala vlastní služby a že podnikům ukládala omezení, která jim bránila nasměrovat spotřebitele k alternativním, často levnějším nákupním kanálům na platformě Google Play.

    … více »
    Ladislav Hagara | Komentářů: 2
    22.7. 19:44 | IT novinky

    Samsung na akci Galaxy Unpacked July 2026 (YouTube) představil své nové telefony Galaxy Z Fold8 Ultra, Fold8 a Flip8, hodinky Galaxy Watch Ultra2 a Watch9 a chytré brýle ve spolupráci s Gentle Monster a Warby Parker.

    Ladislav Hagara | Komentářů: 0
    22.7. 16:11 | IT novinky

    Po pěti letech vývoje vyšla česká počítačová hra Scarlet Deer Inn (ProtonDB). Scarlet Deer Inn je vyšívaná temná středověká pohádka. Zatímco život ve zdánlivě obyčejné vesnici se točí kolem běžných povinností a sousedských drbů, v podzemí se skrývají zlověstná tajemství.

    Ladislav Hagara | Komentářů: 1
    22.7. 13:33 | IT novinky

    Představen byl Raspberry Pi Touch Display 2 s uhlopříčkou 10 palců a rozlišením 1200 × 1920 pixelů. Cena je 80 dolarů.

    Ladislav Hagara | Komentářů: 3
    22.7. 13:22 | Komunita

    RPCS3 (Wikipedie), tj. open source emulátor Sony PlayStation 3, snížil minimální požadavky. Nově jsou podporovány starší grafické karty ATI Radeon řady HD 2000, 3000 a 4000 z let 2007 až 2009. Na PC běží už 75 % všech her pro PlayStation 3. V budoucnu bude RPCS3 fungovat bez firmwaru z PS3. V RPCS3 byl implementován systémový modul cellSysmodule (𝕏).

    Ladislav Hagara | Komentářů: 2
    22.7. 11:00 | Zajímavý software

    Vyšel open-source nástroj winetop (MIT) — nativní CLI/TUI pro sledování a ukončování Wine, Proton, Lutris, Heroic a Bottles sezení. Seskupuje procesy podle WINEPREFIX / Steam AppId, umí bezpečně zabít jen hru (včetně Steam reaperu) a nabízí i skriptovatelné příkazy (list, kill, orphans, …). Balíčky jsou mimo jiné na crates.io, Copru (dnf copr enable kovariadam/winetop), PPA ppa:kovariadam/winetop a AUR (winetop-bin).

    kovariadam | Komentářů: 0
    22.7. 02:44 | IT novinky

    Ve spolupráci společností OpenAI a Work Louder byla představena (𝕏) hardwarová klávesnice Codex Micro pro práci s AI agenty. Cena klávesnice je 230 dolarů.

    Ladislav Hagara | Komentářů: 2
    21.7. 20:00 | Nová verze

    Byl vydán Mozilla Firefox 153.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 153 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (7%)
     (2%)
     (17%)
     (30%)
     (5%)
     (6%)
     (2%)
     (15%)
     (24%)
    Celkem 2215 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: C - nacteni souboru

    3.5.2014 12:55 Petr | skóre: 29
    C - nacteni souboru
    Přečteno: 1039×
    Potreboval bych v C nacist soubpor pro potreby dalsiho parsovani, pouzivam funkci scanf("%s", &soubor). Problem je ze struktura adresare je typu /svn/data/0007/gsm46/soubor. Retezec se nacte do toho /000 kde se ukonci jakozto posledni nulovy znak a dal se mi nic nenacte. Bohuzel adresarova struktura je dana. Krome moznosti zkopirovat si data nekam do tmp a pak opet ulozit nevim jak postupovat, da se s tim neco rozumneho delat?

    Odpovědi

    3.5.2014 13:59 DarkKnight | skóre: 26
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    int main(int argc, char *argv[]){
      char nazev[100];
      scanf("%s",nazev);
    
      puts(nazev);
      return 0;
    }

    funguje bez problemu (predpokladam, ze jde o problem nacteni cesty k souboru), nicmene scanf bude delat problem, pokud cesta k souboru obsahuje mezery, pak by slo pouzit fgets (gets neni bezpecny)
    3.5.2014 14:06 DarkKnight | skóre: 26
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    respektive by tam spravne jeste melo byt osetreni maximalni delky retezce u scanf - scanf("%100s", nazev), aby nedoslo k buffer overflow
    3.5.2014 19:51 Radek Isa | skóre: 14
    Rozbalit Rozbalit vše Re: C - nacteni souboru

    int main(){

    FILE * soubor;

    char data[256]; unsigned int i = 0; unsigned int znak;

    while(i < 255 && (znak = getc(stdin)) != -1){ data[i]; i++; } data[i] = 0; soubor = fopen(data, "rw");

    fclose(soubor); }

    Tohle ma nevýhodu přečte to i znaky, které jsou nepovolené v cestě souboru. Program pokud chceš aby program reagoval na nový řádek musíš místo -1 použít '\n'
    3.5.2014 19:55 Radek Isa | skóre: 14
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    oprava v ciklu musí být data[i] = znak
    5.5.2014 08:15 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C - nacteni souboru

    Myslím si že autor, chtěl něco jiného, ale mlčí, přesto pro pořádek ještě oprav datový typ znak a podmýnku ciklu (test na -1 není dobře).
    Ošetření, otevření, zápis a ošetření uzavření souboru už asi nebylo předmětem…

    OT: A pozor na Jardíka (size_t)… ;-)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    3.5.2014 19:52 jekub
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    zkuste to bez &, pane Petre!
    5.5.2014 10:09 Jirka
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    možná by pomohlo, kdybyste vysvětlil co vlastně kam načítáte. Soubor, nebo název souboru? Nicméně na řetězci /000 se to opravdu zastavit nemůže, neb se nejedná o nulový znak '\0', nýbrž o znak pro číslici '0', nehledě k tomu, že scanf načítá až do první mezery dle specifikace fce isspace, takže problém bude patrně někde jinde. Např., jak zde předřečník naznačil, načítáte to na adresu proměnné soubor, což už je patrně pointer, čímž přepíšete paměť procesu, a v takovém případě už se pak nelze divit vůbec ničemu. natož že to nefunguje.
    6.5.2014 10:49 dword
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    Nevim jestli jsem to dobre pochopil, ale mozna pomuze alespon tohle pro inspiraci. Prikladam program pro nacteni obsahu souboru do bufferu:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	char *filename = "/svn/data/0007/gsm46/soubor";
    
    	//Try opening file
    	FILE *finput = fopen(filename, "r");
    
    	//Check result	
    	if(finput == NULL)
    	{
    		fprintf(stderr, "Can't open %s\n", filename);
    		exit(EXIT_FAILURE);
    	}
    
    	//Get filesize
    	fseek(finput, 0L, SEEK_END);
    	int fsize = ftell(finput);
    	fseek(finput, 0L, SEEK_SET);
    
    	//Allocate buffer which is big enough to hold content of the file
    	char *fbuffer = (char *) malloc(fsize);
    	if(fbuffer == NULL)
    	{
    		fprintf(stderr, "Can't allocate %d bytes to hold buffer for file %s\n", fsize, filename);
    		exit(EXIT_FAILURE);
    	}
    
    	//Fill buffer with content of a file
    	int i;
    	for(i = 0; i < fsize; i++)
    		fbuffer[i] = fgetc(finput);
    
    	//Close the stream
    	fclose(finput);
    	
    	//Now whole file is held in: fbuffer[0] ~ fbuffer[fsize-1]
    	//parse_data(fbuffer, fsize);
    
    	//Deallocate buffer
    	free(fbuffer);
    
    	return EXIT_SUCCESS;
    }
    
    17.5.2014 22:34 Martin
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    Prosím, pokud už používáte konstantní řetězce, uvádějte i datový typ. Správně má být const char *filename = "/svn/data/0007/gsm46/soubor";. Možná to na PC projde, kompilátor za vás vygeneruje proměnnou filename na zásobníku a zinicializuje jí, ale není to standardní situace. Jednou, zvláště u embedded systémů můžete narazit, doslova, zápisem do ROM.

    Jardík avatar 8.5.2014 19:46 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    ftell vrací long, váš kód obsahuje nebezpečnou možnost overflow proměnné typu int, to jest znaménkové, takže nedefinované chování, může tedy dojít ke smazání domovského adresáře. Dále tam máte race-condition, kdy může dojít ke změně velikosti souboru mezi voláním ftell() a načítáním dat. Dotaz je k jazyku C, proč přetypováváte návratovou hodnotu typu void* na char*? Takové přetypování je v C implicitní a ukazuje vaši neznalost. Dále malloc chce hodnotu typu size_t, proč mu cpete int bez toho, aniž byste si ošetřil, že hodnota není větší než SIZE_MAX a jestli není záporná? .. pak známe velikost souboru, alokujete si buffer a pak načítáte jak debil po jednom znaku .. dobrá, řekněme že počítáte s race-condition, ale nikde nekontrolujete vrácení EOF? Vy vůbec nekontrolujete chybové kódy. Tak alespoň použijte C++, streamy a výjimky, když už jsem línej. Ale dotaz je k C, takže meh. Váš program má taky vadu, že ten soubor vůbec nemusíte načíst konzistentní, něco vám ho může změnit během čtení a dostanete kravinu. No, ale to asi nejde doladit bez použití platformě závislých fcí. Takže bagr hrabe. Nejlepším řešením je asi použít knihovnu JardikSuperLib, která má funkci jardik_superLibNacti_soubor(), která dělá přesně to, co tazatel požaduje.
    Věřím v jednoho Boha.
    8.5.2014 20:18 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C - nacteni souboru

    Asi to patří k dword.

    To to trvalo!, už jsem myslel, že budu muset něco napsat (nebyl bych tak zlý).

    Ale ber to tak, že je zde možnost, že to overflow způsobí napsání super sci-fi knihy, tak bych to tak nezatracoval ;-).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Jardík avatar 8.5.2014 20:58 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    ^^ :-)
    Věřím v jednoho Boha.
    15.5.2014 11:51 dword
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    ftell vrací long...
    mate pravdu, byla to chyba

    Dále tam máte race-condition, kdy může dojít ke změně velikosti souboru mezi voláním ftell() a načítáním dat... Ja to vim, jestli to umite se standardnimi funkcemi vyresit, rad se necham priucit.
    Takové přetypování je v C implicitní a ukazuje vaši neznalost.
    Jestli najdu ve vasem prispevku jedno slovo navic, ktere tam nemuselo byt, taky to ukazuje vasi neznalost? Rekl bych ze to spis ukazuje, ze si o sobe myslite, ze jste mistr sveta. Co je implicitni, neznamena ze nemuze byt explicitne zopakovano (zdurazneno). (nezapomnel jsem includnout <stdlib.h>, takze se me to netyka)
    pak známe velikost souboru, alokujete si buffer a pak načítáte jak debil po jednom znaku .. dobrá, řekněme že počítáte s race-condition, ale nikde nekontrolujete vrácení EOF?
    Protoze line-buffering debilku. Nekontroluju EOF, protoze chybu cteni v mem programu (napsanem pro zacatecnika) neuvazuju, velikost znam (to ze se zmeni behem volani programu take neuvazuju).

    No, ze jsem tu vubec neco psal :D Vite co vsichni zacatecnici? Bezte kvuli Jardika nekam, bud se naucte vsechno hned, nebo se na to rovnou vykaslete ;)
    15.5.2014 16:08 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    Vzájemně si můžete rozškubat občanky ;-)

    Z většinou nesouhlasím (například to lze vyřešit standardními funkcemi právě tak, že se ošetřují návratové hodnoty nebo|a se přidá feof()), jen se tě můžu zastat v tom, že souhlasím s:

    Co je implicitni, neznamena ze nemuze byt explicitne zopakovano (zdurazneno).
    bo si myslím, že je to tak správně, protože pokud to explicitně uvedu, znamená to, že jsem si toho plně vědom a že jsem to tak chtěl a zrovna tam, kde je, si myslím, že patří.

    Ale ta ignorace ošetření je fatální, příště to napiš do komentářů, bo bez toho to navádí k prasáckým kódům, bo 90% kódu vzniká pomocí copy&paste a pokud to nenapíšeš ty a nikdo no neromázne, považuje to roj lidí za kopírování-hodné…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    pavlix avatar 16.5.2014 10:02 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    Vzájemně si můžete rozškubat občanky ;-)
    Proč vzájemně, Jardík píše po svém, zbytečně konfliktně, ale víceméně slušně. Ten dword si na něm jenom léčí nějaký osobní problém. Ať si tedy občanku roztrhne sám a svoje problémy si vyřeší.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Jardík avatar 15.5.2014 18:01 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    Ja to vim, jestli to umite se standardnimi funkcemi vyresit, rad se necham priucit.
    Neumím
    Jestli najdu ve vasem prispevku jedno slovo navic, ktere tam nemuselo byt, taky to ukazuje vasi neznalost?
    Ano. Já nikde netvrdím, že všechno znám. Vlastně já neznám skoro nic. Jedině Bůh zná všechno, protože On vše vytvořil.
    Rekl bych ze to spis ukazuje, ze si o sobe myslite, ze jste mistr sveta.
    Nemyslím si to. Pokud si počtete v mých příspěvcích různě zde po serveru, zjistíte, že vím, že jsem neschopný idiot s poruchou osobnosti.
    Co je implicitni, neznamena ze nemuze byt explicitne zopakovano (zdurazneno)
    Ano, ale já bych ještě napsal nad řádek komentář, že vím, že je to implicitní, a že to explicitně zopakovávám, abych to zdůraznil i pro Jardíky, že to vím a jen to chcu zdůraznit :-)
    Protoze line-buffering debilku.
    Budiž, ale proč volat třeba milionkrát funkcu (třeba pro soubor 1M), když můžu zavolat jinou funkcu jednou?
    Nekontroluju EOF, protoze chybu cteni v mem programu (napsanem pro zacatecnika) neuvazuju,
    Právě zě začátečníka byste měl nějak upozornit, že ta funkce může vrátit chybový kód, aby to vůbec věděl.
    Vite co vsichni zacatecnici? Bezte kvuli Jardika nekam, bud se naucte vsechno hned, nebo se na to rovnou vykaslete ;)
    To ne, to nebyl účel mého komentáře. Ani to neberte jako nějaký útok na vaši osobu. Můj komentář měl být poučný pro tazatele, upoznit na různé chyby, nedostatky, atp. Já to neumím hezky podat však, aby to vyznělo nějak lépe.
    Věřím v jednoho Boha.
    15.5.2014 18:37 dword
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    Jardik: Dobra tedy, prehodnotil jsem si mineni o vas, ale na dalsi obhajobu tu kaslu, tazateli to nijak nepomuze a uz se ani neozval.

    Sangala: Jardik predpokladam narazel na tento problem http://c-faq.com/malloc/mallocnocast.html mozna by vas to mohlo zajimat.
    15.5.2014 19:10 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C - nacteni souboru

    Ten problém je mi důvěrně známy, ale tak nějak z druhé strany, jakmile dělám prkotinu v C tak téměř vždy (2× do roka, bo raději v C++ a nejraději C+) zapomenu, include-ovat stdlib.h a hledím jak čáp do trubky na ty warning-y (gcc).

    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    17.5.2014 10:01 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    Kde najdu tu knihovnu jardik_superLib?
    Jardík avatar 17.5.2014 11:11 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: C - nacteni souboru
    Musíš použít vyhledávač "Jardik Super Search Engine", zadej to tam a hned první odkaz. Ale pozor, je to pod GPL nekompatibilní licencí.
    Věřím v jednoho Boha.

    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.