Messages in this thread | | | Date | Wed, 12 Feb 2003 17:46:37 -0800 | From | "Randy.Dunlap" <> | Subject | Re: O_DIRECT foolish question |
| |
On 12 Feb 2003 18:22:35 -0500 Bruno Diniz de Paula <diniz@cs.rutgers.edu> wrote:
| Just to complete the information, I am trying to read a file with 5 | bytes, and here is the piece of code I am using: | | char *message; | int fd = open("/var/tmp/testopen.txt", O_RDONLY|O_DIRECT); | int len, pagesize = getpagesize(); | | posix_memalign((void **)&message, pagesize, pagesize); | if(fd < 0) { | printf("Unable to open file, errno is %d.\n", errno); | } else { | if((len = read(fd, message, pagesize)) < 0) { | perror("read"); | } else { | printf("%d bytes read from file.\n", len); | printf("Message: %s", message); | } | } | close(fd); | | Thanks, | | Bruno. | | On Wed, 2003-02-12 at 18:02, Bruno Diniz de Paula wrote: | > 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? | > [strace snipped] | > | > 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.
Here's what I get using Bruno's and cw's (od) programs:
2.4.8|2.4.20 2.4.20 2.5.54 ext2 ext3 ext2|ext3 ==== ==== ========= od: read 0 bytes read: Inv. arg. read: Inv. arg. bruno: 0 bytes read read: Inv. arg. read: Inv. arg.
-- ~Randy - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |