Salut
Nu imi dau seama de ce nu reusesc sa citesc din un anumit fisier care are
2.6G mai mult de 2G de date. Sistemul are asa:
- kernel 2.6.10
- glibc 2.3.4
- kernel-headers 2.6.8.1
Am incercat cu tot felul de programe, inclusiv "cat" (care stiam eu ca
alta data, pe alta masina a mers cu fisiere > 2G). Mi-am facut si eu un
program micut astfel:
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
static void printfile(const char* fname);
int main(int argc, char** argv)
{
int i;
if (argc < 2) return -1;
for(i = 1; i < argc; ++i) {
printfile(argv[i]);
}
return 0;
}
static void printfile(const char* fname)
{
unsigned char buffer[16384];
int noread;
int fd = open(fname, O_RDONLY | O_LARGEFILE);
if (fd < 0) {
perror("lfscat:");
return;
}
while((noread = read(fd, buffer, sizeof(buffer))) > 0) {
write(1, buffer, noread);
}
close(fd);
}
Compilat cu:
$ gcc -D_FILE_OFFSET_BITS=64 lfscat.c -o lfscat
strace arata cum deschide fisierul cu O_LARGEFILE. Ultimele randuri la
strace inainte sa iasa sunt:
read(3, "a\225[#f\202\203\277\231\232\2068\262\260\330\330\241\332"...,
16384) = 16384
write(1, "a\225[#f\202\203\277\231\232\2068\262\260\330\330\241\332"...,
16384) = 16384
read(3, 0xbfffb5a0, 16384) = -1 EIO (Input/output error)
close(3) = 0
exit_group(0) = ?
Nu inteleg de ce primeste EIO (in dmesg nu apare nimic)...
--
Mihai RUSU Email: [EMAIL PROTECTED]
GPG : http://dizzy.roedu.net/dizzy-gpg.txt WWW: http://dizzy.roedu.net
"Linux is obsolete" -- AST
---
Detalii despre listele noastre de mail: http://www.lug.ro/