zoukankan      html  css  js  c++  java
  • linux下面mmap和setsignal函数用法

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/mman.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/stat.h>
    #include <signal.h>
    #include <setjmp.h>
    
    
    char* buf;
    struct stat statbuf;
    
    void handler(int signo)
    {
        printf("permission denied
    ");
        
        if (mprotect(buf, statbuf.st_size, PROT_READ|PROT_WRITE) == -1)
        {
            perror("failed to alter permission");
            exit(1);
        }
        printf("permission modified
    ");
    }
    
    int main()
    {
        int fd;
        
        if (signal(SIGSEGV, handler) == SIG_ERR)
        {
            printf("can not set handler for SIGSEGV.
    ");
            exit(0);
        }
        
        if (stat("test.txt", &statbuf) == -1)
        {
            perror("failed to get stat");
            exit(1);
        }
        
        fd = open("test.txt", O_RDWR);
        if (fd == -1)
        {
            perror("failed to open file
    ");
            exit(1);
        }
        
        buf = (char*)mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);  // readonly memory map
        printf("try to write to a readonly memccpy map
    ");
        memcpy(buf, "china
    ", 6);
     
        if (munmap(buf, statbuf.st_size) == -1)
        {
            perror("failed to unmap
    ");
            exit(1);
        }
        close(fd);
        
        return 0;
    }
  • 相关阅读:
    洛谷 P1823 音乐会的等待
    [The Diary] 10.30 Monday
    洛谷 P1094 纪念品分组
    codevs 1258 关路灯
    NOIP 2012 国王游戏(60分)
    bzoj3745 [COCI2015]Norma
    CF1110E Magic Stones
    bzoj4237 稻草人
    bzoj2653 middle
    单调队列与斜率优化杂题
  • 原文地址:https://www.cnblogs.com/kex1n/p/6992777.html
Copyright © 2011-2022 走看看