[ amavisto @ 16.03.2006. 17:17 ] @
| pozdrav ljudi,
pokusavam da izvucem zadnjih par megabajta iz jednog velikog fajla (>2GB).
OS je RedHat, kernel 2.4.21-32.0.1.ELsmp (viseprocesorska masina, Intel Xeoni na 3.6GHz).
fajl sistem na toj particiji je ext3 (kazu da uredno podrzava LFS). glibc > 2.3.2.
svi fajlovi u tom diru imaju -rw-r--r-- dozvole.
probam kao root da otvorim file i dobijem permission denied za fajl veci od 2GB
(manji od 2GB se uredno otvori).
u cemu je caka? tj. kako da otkrijem u cemu je caka :)
evo kako izgleda deo koda (varijanta sa fopen/fopen64 isto ne radi):
Code:
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#define BUF_SIZE 8192
int main(int argc, char * argv[])
{
int log, extract;
...
if ((log = open(argv[1], O_RDONLY | O_LARGEFILE)) == -1) {
perror("open");
return -1;
}
...
return 0;
}
milan |
[ NrmMyth @ 16.03.2006. 21:20 ] @
Necu puno ulaziti u tvoj problem, ali evo ti cinjenica:
Ako je najveci moguci broj na tvom kompajleru 32-bitni onda je najveca vrijednost int-a 2 GB. Onda je nemoguce indexirati povise ta dva GB.
[ amavisto @ 16.03.2006. 22:29 ] @
Citat:
NrmMyth: Necu puno ulaziti u tvoj problem, ali evo ti cinjenica:
Ako je najveci moguci broj na tvom kompajleru 32-bitni onda je najveca vrijednost int-a 2 GB.
Onda je nemoguce indexirati povise ta dva GB.
da, da, znam da je 2^32 = 2GB... ali svuda pricaju kako je i na 32bitnim platofmama
moguce citati i pisati fajlove vece od 2GB (kako bi onda mysql imala tabele velicine 4GB...)
evo gde sam gledao (izmedju ostalog):
http://www.uwsg.iu.edu/hypermail/linux/kernel/0011.2/0042.html (linux kernel arhiva)
http://www.suse.de/~aj/linux_lfs.html
http://linuxgazette.net/issue67/tag/13.html
http://dev.mysql.com/doc/refman/5.0/en/table-size.html
itd.
[ NrmMyth @ 17.03.2006. 03:58 ] @
Ja ti ne mogu puno ulaziti u tu temu, jer ne znam puno o tome.
Unsigned int = 2^32 = 4 GB
Po meni ovisi sve o tipu "size_t" ako govorimo o standardnom C/C++.
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.