RE: Why I can't map memory with mmap

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: kernelnewbies-bounces@xxxxxxxxxxxxxxxxx [mailto:kernelnewbies-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of Kevin O'Gorman
Sent: Monday, August 18, 2014 8:15 AM
To: kernelnewbies@xxxxxxxxxxxxxxxxx
Subject: Why I can't map memory with mmap

maybe someone here can help me figure out how to map a big (really big) work area and lock it in memory.
I wrote a little test program to try this out, and it fails.  As a regular user, perror() tells me some "resource is temporarily unavailable".  As root, it says it "cannot allocate memory".  I'm only asking for 1 byte.  What's the problem?  BTW it also fails if it asks for a mibibyte (1<<20).
Here's the whole program

/**
 * @file
 * <pre>"Find out the limits on locked memory"
 * Last Modified: Mon Aug 18 07:31:01 PDT 2014</pre>
 * @author Kevin O'Gorman
 */

#define _GNU_SOURCE /* enable some of the mmap flags */
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>

int
main(int argc, char *argv[])
{
  void *where;
  size_t length = 1;

  where = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB | MAP_LOCKED | MAP_POPULATE, -1, 0);
  if (where != MAP_FAILED) {
    printf("Mapped at %p\n", where);
  } else {
    perror("Mapping failed");
  }
  
  return EXIT_SUCCESS;
}

I'm pretty sure you need to pass the file descriptor of an open file or device as the fd (second parameter from the end). -1 is not a valid fd.

Jeff Haran

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies





[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux