From owner-freebsd-current Wed Dec 11 08:36:14 1996 Return-Path: Received: (from root@localhost) by freefall.freebsd.org (8.8.4/8.8.4) id IAA20521 for current-outgoing; Wed, 11 Dec 1996 08:36:14 -0800 (PST) Received: from smyrno.sol.net (smyrno.sol.net [206.55.64.117]) by freefall.freebsd.org (8.8.4/8.8.4) with ESMTP id IAA20511; Wed, 11 Dec 1996 08:36:06 -0800 (PST) Received: from solaria.sol.net (solaria.sol.net [206.55.65.75]) by smyrno.sol.net (8.8.3/8.8.3) with SMTP id KAA23321; Wed, 11 Dec 1996 10:35:34 -0600 (CST) Received: from localhost by solaria.sol.net (8.5/8.5) id KAA03706; Wed, 11 Dec 1996 10:36:02 -0600 From: Joe Greco Message-Id: <199612111636.KAA03706@solaria.sol.net> Subject: mlocking an mmap'ped region? To: current@freebsd.org, dyson@freebsd.org Date: Wed, 11 Dec 96 10:35:59 CST X-Mailer: ELM [version 2.4dev PL65] MIME-Version: 1.0 Content-Type: text Sender: owner-current@freebsd.org X-Loop: FreeBSD.org Precedence: bulk The following does not seem to work on a 2.2-CURRENT box (built yesterday). It does seem to work on SunOS. Is it just too early to be doing programming or is there really something preventing me from doing this? Thanks, ... JG #include #include #include #include #include #include #include /* * mlock-files - read a list of files on stdin, mmap() them, mlock() them, * and then sleep forever. */ int mapper(fd) int fd; { struct stat sb; size_t size; caddr_t map; if (fstat(fd, &sb) < 0) { perror("fstat"); close(fd); return(-1); } size = (size_t)sb.st_size; if ((int)(map = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0)) == -1) { perror("mmap"); close(fd); return(-1); } if (mlock(map, size) < 0) { perror("mlock"); fprintf(stderr, "map = %08x eof=%d\n", map, size); close(fd); return(-1); } else { fprintf(stderr, "allocated map = %08x eof=%d\n", map, size); } close(fd); return(0); } int main(int argc, char *argv[]) { int fd; char buffer[8192]; if (argc != 1) { fprintf(stderr, "usage: mlock-files\n"); exit(1); } while (! feof(stdin)) { fgets(buffer, sizeof(buffer), stdin); if (strchr(buffer, '\n')) { *strchr(buffer, '\n') = '\0'; } if (! feof(stdin)) { if ((fd = open(buffer, O_RDONLY, 0755)) < 0) { perror(buffer); } else { mapper(fd); } } } sleep(99999999); } -- ... Joe ------------------------------------------------------------------------------- Joe Greco - Systems Administrator jgreco@ns.sol.net Solaria Public Access UNIX - Milwaukee, WI 414/342-4847