如何使用syscall在C语言中

使用syscall调用函数报错,如下代码,是不是我的写法有问题

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/mman.h>

int main(){    
    int size = 10;  
    int fd = open ("test.txt", O_RDONLY); 

    // // 这样调用是正常的   
    char *f1 = (char *)  mmap( 0, size, PROT_READ, MAP_PRIVATE, fd, 0);
    printf("[1]  mmap result : %s", f1); 
    // // 这么写有问题吗   会报错
    char *f2 = (char *)  syscall(SYS_mmap, 0, size, PROT_READ, MAP_PRIVATE, fd, 0);
    printf("[2]  mmap result : %s", f2); 

    // int fd_ = syscall(SYS_open, "test.txt", 0);
    // printf("%d ----", fd_);
    return 0;
}

或者能否提供个syscall调用mmap的helloworld参考一下,谢谢各位大佬了### 问题描述

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 11.1k
1 个回答

mmap调用的系统调用时mmap2 不是 mmap 所以你也要使用mmap2

    char *f2 = (char *)  syscall(SYS_mmap2, 0, size, PROT_READ, MAP_PRIVATE, fd, 0);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题