Messages in this thread | | | Subject | Re: O_DIRECT foolish question | From | Bruno Diniz de Paula <> | Date | 12 Feb 2003 18:02:58 -0500 |
| |
On Wed, 2003-02-12 at 17:42, Chris Wedgwood wrote: > On Wed, Feb 12, 2003 at 05:29:52PM -0500, Bruno Diniz de Paula wrote: > > > But I am using multiples of page size in both buffer alignment and > > buffer size (2nd and 3rd parameters of read). The issue is that > > when I try to read files with sizes that are NOT multiples of block > > size (and therefore also not multiples of page size), the read > > syscall returns 0, with no errors. > > What filesystem?
ext2.
> > Can you send an strace of this occurring?
execve("./testopen", ["./testopen"], [/* 30 vars */]) = 0 uname({sys="Linux", node="urca", ...}) = 0 brk(0) = 0x80497fc open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=57677, ...}) = 0 old_mmap(NULL, 57677, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40012000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0]Z\1\000"..., 1024) = 1024 fstat64(3, {st_mode=S_IFREG|0755, st_size=1102984, ...}) = 0 old_mmap(NULL, 1112740, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40021000 mprotect(0x40129000, 31396, PROT_NONE) = 0 old_mmap(0x40129000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x107000) = 0x40129000 old_mmap(0x4012f000, 6820, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4012f000 close(3) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40131000 munmap(0x40012000, 57677) = 0 open("/var/tmp/testopen.txt", O_RDONLY|O_DIRECT) = 3 brk(0) = 0x80497fc brk(0x804c7fc) = 0x804c7fc brk(0) = 0x804c7fc brk(0x804d000) = 0x804d000 read(3, "", 4096) = 0 fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 4), ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40012000 write(1, "0 bytes read from file.\n", 240 bytes read from file. ) = 24 close(3) = 0 write(1, "Message: ", 9Message: ) = 9 munmap(0x40012000, 4096) = 0 exit_group(0) = ?
Thanks a lot,
Bruno.
> > > So the question remains, am I able to read just files whose size is > > a multiple of block size? > > No. > > You ideally should be able to read any length file with O_DIRECT. > Even a 1-byte file. > > > > --cw -- Bruno Diniz de Paula <diniz@cs.rutgers.edu> Rutgers University [unhandled content-type:application/pgp-signature] | |