read() wont allow me to read files larger than 2 gig (on a 64bit)

AceLan Kao acelan.kao at canonical.com
Fri Dec 25 09:04:05 UTC 2009


Dear Glide,

Does the stat() return the correct file size?
I remember that there is a 64bits version of stat(), stat64(), maybe
that's the problem?

Best regards,
AceLan Kao.

2009/12/25 glide creme <glidecreme at gmail.com>:
> Hi
> Sorry if I'm asking on the wrong mailinglist,
> but I've asked on various forums and I havn't found a solution.
>
> I can't read files larger than 2 gig on my ubuntu64bit using 'read()',
> the problem is not related to the allocation itself, which works.
> Attached is a sample program that illustrates this.
>
> I've tried with various, compiler flags like
> -D_FILE_OFFSET_BITS=64
>
> According to man 2 read, the maximum is limited by SSIZE_MAX
> which is defined in
>
> /usr/include/bits/posix1_lim.h
> # define SSIZE_MAX LONG_MAX
>
> And LONG_MAX is defined in /usr/include/limits.h as
> # if __WORDSIZE == 64
> # define LONG_MAX 9223372036854775807L
> # else
> # define LONG_MAX 2147483647L
> # endif
> # define LONG_MIN (-LONG_MAX - 1L)
>
> Is this the expected behaviour for the read function on a 64bit platform,
> or is something broken
>
> Thanks in advance
>
> edit:
>
> by the way
>
> readelf -h ./a.out
> ELF Header:
>   Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
>   Class:                             ELF64
>   Data:                              2's complement, little endian
>   Version:                           1 (current)
>   OS/ABI:                            UNIX - System V
>   ABI Version:                       0
>   Type:                              EXEC (Executable file)
>   Machine:                           Advanced Micro Devices X86-64
>   Version:                           0x1
>   Entry point address:               0x400750
>   Start of program headers:          64 (bytes into file)
>   Start of section headers:          5312 (bytes into file)
>   Flags:                             0x0
>   Size of this header:               64 (bytes)
>   Size of program headers:           56 (bytes)
>   Number of program headers:         9
>   Size of section headers:           64 (bytes)
>   Number of section headers:         37
>   Section header string table index: 34
>
> ldd ./a.out
>         linux-vdso.so.1 =>  (0x00007fff689ff000)
>         libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007ffee433e000)
>         libm.so.6 => /lib/libm.so.6 (0x00007ffee40ba000)
>         libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007ffee3ea3000)
>         libc.so.6 => /lib/libc.so.6 (0x00007ffee3b34000)
>         /lib64/ld-linux-x86-64.so.2 (0x00007ffee464e000)
>
> uname -a
> Linux csi 2.6.31-15-generic #50-Ubuntu SMP Tue Nov 10 14:53:52 UTC
> 2009 x86_64 GNU/Linux
>
> --
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
>
>



-- 
Chia-Lin Kao(AceLan)
http://blog.acelan.idv.tw/
E-Mail: acelan.kaoATcanonical.com (s/AT/@/)




More information about the kernel-team mailing list