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/


Raspunde prin e-mail lui