Date: Fri, 24 Dec 1999 00:18:53 -0500 (EST) From: Mikhail Teterin <mi@kot.ne.mediaone.net> To: questions@freebsd.org Subject: questions about mmap() Message-ID: <199912240518.AAA18438@rtfm.newton>
next in thread | raw e-mail | index | archive | help
Hello!
The included simple program, tries to mmap stdin until possible, and
tries to reference the beginning of the chunk. In all honesty, I
expected mmap() to fail, if the offset is beyond the file's size. But it
does not fail. Instead, the attempt to reference the beginning of that
extra chunk results in "Bus error":
mi@rtfm:~/bz (1214) ./m < /kernel
0x180e5000, 2039808Bus error (core dumped)
How can I find out when the last block of the file was read (ok, I can
be catching the SIGBUS -- yuck), and where is the file's last byte in
it? That is, I'm trying to avoid using fstat(2) :-) Thanks!
-mi
#include <sys/types.h>
#include <sys/mman.h>
#include <unistd.h>
#include <stdio.h>
main() {
char *p;
off_t offset;
for(offset = 0;
(p = mmap(NULL, 512, PROT_READ, 0, STDIN_FILENO, offset))
!= MAP_FAILED;
offset+=512) {
fprintf(stderr, "%\r%p, %d", p, offset);
fprintf(stderr, ", %d", *p);
munmap(p, 512);
}
perror("\nmmap");
}
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199912240518.AAA18438>
