Portál AbcLinuxu, 13. května 2025 17:03

Dotaz: Maximalni velikost otviraneho txt souboru skrze FILE* v C

tomes.io avatar 19.9.2012 16:27 tomes.io | skóre: 12 | blog: tomesh
Maximalni velikost otviraneho txt souboru skrze FILE* v C
Přečteno: 574×
Odpovědět | Admin
Ahoj,

zajimalo by me, jak veliky muze byt textovy soubor, ktery otviram pro cteni. Resp. by me zajimalo, zda nize uvedeny program, ktery jen pocita vyskyt retezce v danem textovem souboru muze mit teoreticky i velikost nekolika GB, nebo je to nejak omezene?

Chci, aby muj program sel radek po radku (max velikost radku je 512) a v kazdem, pokud najde hledany retzec 'do' spocital, kolikrat se na radku vyskytl a na kolikatem radku to vlastne bylo. Nize uvedeny program funguje pro "male" textove soubory o par radcich. Muze ale takovy program cist i velike soubory?


void read_file (FILE *fr, char *what){
   
    char input[512];     
    int what_len = strlen(what);                             
    int line = 0;                                         //Counter of lines.
    int num = 0;     
   
    /*Reading a text file line by line.*/
   
    while (fgets(input, 512 , fr) != NULL){
       
       line++;        
       char *where = input;
       
        /*Checking an occurrence of searched string.*/
       
          while ((where = strstr(where, what))) {         
           where += what_len;
           num++;           
         }  //End of WHILE
           
         /* Value num > 0 Indicates an occurrence of searched string so that a message for a user can be printed.*/
       
         if (num > 0) {                                     
            printf("Searched string '%s' is found %d times on line %d\n", what, num, line);
       
            num = 0;   //Initial position for the next checking must be 0.
         }  //End of IF
                
     }  //End of WHILE
   
    fclose(fr);
   
}  //End of the function 'read_file'

int main(){  
   
    char *what = "do";
    FILE *fr;
    fr = fopen("text.txt","r");    
    read_file(fr, what);   
    return 0;
}

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.9.2012 16:56 Kit
Rozbalit Rozbalit vše Re: Maximalni velikost otviraneho txt souboru skrze FILE* v C
Odpovědět | | Sbalit | Link | Blokovat | Admin
A proč si to nezkusíš? To je takový problém si vyrobit 20GB soubor s testovacími daty?

Velikost limitována není. Záleží jen na typu souborového systému.
tomes.io avatar 20.9.2012 21:51 tomes.io | skóre: 12 | blog: tomesh
Rozbalit Rozbalit vše Re: Maximalni velikost otviraneho txt souboru skrze FILE* v C
Nenapada me jak tak velky textovy soubor vygenerovat :) Mozna sloucit nekolik zdrojvych souboru linux jadra do jednoho :) Kazdopadne pokud velikost neni problem, tak jsem spokojeny. Diky.
20.9.2012 22:37 Sten
Rozbalit Rozbalit vše Re: Maximalni velikost otviraneho txt souboru skrze FILE* v C
while [ "$(ls -l test.txt | awk '{ print $5 }')" -lt "20000000000" ]; do cat nejaky_kratky_dokument.txt >>test.txt done
20.9.2012 23:05 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Maximalni velikost otviraneho txt souboru skrze FILE* v C
10MiB plný '\0':
dd if=/dev/zero of=10MiB.files bs=1048576 count=10
10MiB random (o kus pomalejší):
dd if=/dev/urandom of=10MiB.files bs=1048576 count=10
Stačí jen upravit 10 na 20480 a je 20GiB files.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
21.9.2012 06:58 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Maximalni velikost otviraneho txt souboru skrze FILE* v C
Na súbore plnom núl mu asi jeho fgets() bude platné ako popolník na motorke.

@ ToMesh: do 32-bitov dĺžky je to bez problémov. Pre väčšie hľadaj large file support glibc.
21.9.2012 11:43 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Maximalni velikost otviraneho txt souboru skrze FILE* v C
Na súbore plnom núl mu asi jeho fgets() bude platné ako popolník na motorke.
A to prečo?
Přečte to vždy právě 511 znaků - nic následný kód sice nenajde, ale celý soubor bude normálně přečten.

Pro autora dotazu: u gcc by mělo stačit, přidat při kompilaci parametr (define) -D_FILE_OFFSET_BITS=64
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
21.9.2012 11:46 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Maximalni velikost otviraneho txt souboru skrze FILE* v C
Na 32bit to obvykle je limitováno (proto to nezvládnou ani standardní compilace PHP-ek na 32bit).
K odstranění limitu je třeba kompilovat s -D_FILE_OFFSET_BITS=64.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
tomes.io avatar 21.9.2012 19:56 tomes.io | skóre: 12 | blog: tomesh
Rozbalit Rozbalit vše Re: Maximalni velikost otviraneho txt souboru skrze FILE* v C
Diky, ten kompilacni prikaz je asi to co jsem potreboval, prihodim do Makefilu :)

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.