Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Jun 2001 14:20:17 +0800 (CST)
From:      Tai-hwa Liang <avatar@mmlab.cse.yzu.edu.tw>
To:        <freebsd-stable@FreeBSD.org>
Subject:   lseek(SEEK_END) then read()... bug of feature?
Message-ID:  <Pine.BSF.4.33.0106281339090.72014-100000@www.mmlab.cse.yzu.edu.tw>

next in thread | raw e-mail | index | archive | help
Hi,

	Anyone tried lseek() from the end of file then read something
out? I've tested the attached code on FreeBSD 4-stable. Both of the two
-stable box(cvsupped on May-02-2001 and Jun-19-2001) prints error
message(Undefined error: 0) on the first read(); however, the second
read() worked without any problem....

	I've also tested this code on Linux(2.4.x) and Windoze 98. It
seemed that all read() returned correct result. Did I misunderstand
the meaning of lseek(2)?

------------------------------------------------------------------------

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int
main()
{
	unsigned int	l = 0;
	off_t		offset;
	int		ret, fd = open("/kernel", O_RDONLY);

	offset = 0 - sizeof(int);
	lseek(fd, offset, SEEK_END);

	if ((ret = read(fd, &l, sizeof(int))) != sizeof(int))
		perror("read error in phase 1");
	else
		printf("read %d bytes in phase 1\n", ret);

	offset = -4;
	lseek(fd, offset, SEEK_END);

	if ((ret = read(fd, &l, sizeof(int))) != sizeof(int))
		perror("read error in phase 2");
	else
		printf("read %d bytes in phase 2\n", ret);

	printf("result = 0x%x\n", l);
	close(fd);

	return (0);
}


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.33.0106281339090.72014-100000>