6-3.c

来自「linux下一些命令的c语言的实现」· C语言 代码 · 共 34 行

C
34
字号
#include <unistd.h>     /* Support all standards    */
#include <sys/mman.h>   /* Memory locking functions */

#define DATA_SIZE 2048

lock_memory(char   *addr, size_t  size)
{
  unsigned long    page_offset, page_size;
page_size = sysconf(_SC_PAGE_SIZE);
  page_offset = (unsigned long) addr % page_size;
addr -= page_offset;  /* Adjust addr to page boundary */
  size += page_offset;  /* Adjust size with page_offset */
return ( mlock(addr, size) );  /* Lock the memory */
}

unlock_memory(char   *addr, size_t  size)
{
  unsigned long    page_offset, page_size;
page_size = sysconf(_SC_PAGE_SIZE);
  page_offset = (unsigned long) addr % page_size;
addr -= page_offset;  /* Adjust addr to page boundary */
  size += page_offset;  /* Adjust size with page_offset */
return ( munlock(addr, size) );  /* Unlock the memory */
}
void main()
{
  char data[DATA_SIZE];
if ( lock_memory(data, DATA_SIZE) ==- 1 )
    perror("lock_memory");

 /* Do work here */
if ( unlock_memory(data, DATA_SIZE) ==- 1 )
    perror("unlock_memory");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?