home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!cs.utexas.edu!torn!cunews!revcan!software.mitel.com!sharman!sharman
- From: sharman@Software.Mitel.COM (Richard Sharman)
- Newsgroups: comp.os.linux
- Subject: I can't get mmap to work
- Message-ID: <SHARMAN.92Jul28002859@sharman.Software.Mitel.COM>
- Date: 28 Jul 92 04:28:59 GMT
- Sender: sharman@Software.Mitel.COM
- Organization: Mitel. Kanata (Ontario). Canada.
- Lines: 72
-
- I was trying to use "mmap", and am having problems.
-
- I have a simple example, below, which attempts to use mmap on a file,
- and simply prints the value returned. I looked in the source
- (linux/mm/mmap.c) and it seemed that the address has to be a valid
- address in the data space, at a multiple of 0x1000, and the length
- also has to be a multiple of that.
-
- The demo program fails on mmap, with errno=1 (EPERM). This I don't
- understand, since I couldn't see any failures of the kind
- return(-EPERM). I tried it on the SUN under gdb, and the mmap
- succeeded and buff1 looked ok. (It bombed on the printf though!)
-
- System: 0.96c-pl2 (and GCC 2.2.2 of course!)
-
- Here is the code:
- ---------------------
- /* attempt to use mmap */
-
- #include <sys/types.h>
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/mman.h>
- #include <fcntl.h>
- #include <errno.h>
-
- main(int argc, char **argv)
- {
-
- caddr_t file1, file2 ;
- int fd1, fd2 ;
- int save_errno ;
-
- #define LEN1 2048
- caddr_t buff1 ;
-
- buff1 = (caddr_t) memalign(0x1000, LEN1) ;
- if ( buff1 == NULL ) {
- perror("malloc failed") ;
- exit(2) ;
- }
-
-
- if ( argc !=2 ) {
- fprintf(stderr, "no file specified\n") ;
- exit(2) ;
- }
-
- fd1 = open(argv[1], O_RDONLY) ;
- if ( fd1 < 0 ) {
- perror("open failed") ;
- exit(2) ;
- }
- file1 = mmap(buff1, LEN1, PROT_READ, MAP_SHARED|MAP_FIXED, fd1, 0) ;
- save_errno = errno ;
- perror("") ;
- printf("mmap returned %x errno was %d\n", file1, save_errno) ;
-
- exit(0) ;
- }
-
- ----------------------
- and this is the output:
- ----------------------
- ~/test% demo1 demo1.c
- Operation not permitted
- mmap returned ffffffff errno was 1
- ~/test%
-
-
- Any help appreciated,
- Richard
-