[comp.sys.apollo] Using mmap on Apollo

i91@nikhefh.nikhef.nl (Fons Rademakers) (03/21/91)

Hi,
   I am having problems with the mmap routines on the Apollo. My system
is an SR10.3 9000/400 machine. I am trying to use mmap in the following way
but I get all the time the error message: mmap: Invalid argument
The same routine works fine on a SUN (except for the fact that len instead 
of the address of len is passed to mmap). The program that uses this routine
is linked in the following way:
bind -b producer producer.bin ftn/*.bin -align aap page
(the address of aap is passed in comaddr).

Could somebody tell me what Apollo specific changes should be made? Or
show me a piece of code, using mmap, that runs on the Apollo?

Thanks, Fons Rademakers.


============================= code fragment ====================
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/file.h>
#include <sys/stat.h>

int  fd_pawc;
long len;

int hcreatei(mfile, mflen, comaddr, size)
/*
 * mfile         name of file to be mapped
 * mflen         length of filename
 * comaddr       address of common to be mapped
 * size          length of common in 32 bit words
 */
long comaddr;
int  *size, *mflen;
char *mfile;
{
   caddr_t paddr;
   int     istat;
   char    *path, *file, dir[100], *cmd, csiz[10];
   char    *strncat();

   path = "/tmp/";
   strcpy(dir,path);
   file = strncat(dir,mfile,*mflen);

   len = *size * 4;

   fd_pawc = open(file,O_RDWR|O_CREAT,0666);
   if (fd_pawc < 0)
      istat = -errno;
   else {
      paddr = mmap((caddr_t) comaddr, &len,
                   PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED, fd_pawc, 0);
      if (paddr == NULL ||
          (int)paddr%getpagesize() != 0 || (int)len%getpagesize() != 0) {
         perror("mmap");
         istat = -errno;
         close(fd_pawc);
     } else
         istat = len/getpagesize();
   }
   return(istat);
}
-- 
Org:    NIKHEF-H, National Institute for Nuclear and High-Energy Physics.
Mail:   Kruislaan 409, P.O. Box 41882, 1009 DB Amsterdam, the Netherlands
Phone:  (20)5925018 or 5925003                      Telex: 10262 (hef nl)
UUCP:   i91@nikhefh.nikhef.nl            BITNET: nikhefh!i91@mcvax.bitnet