mmap.c

来自「klibc精简化的c程序库」· C语言 代码 · 共 75 行

C
75
字号
#include <errno.h>#include <sys/types.h>#include <linux/unistd.h>struct mmap_arg_struct {	unsigned long addr;	unsigned long len;	unsigned long prot;	unsigned long flags;	unsigned long fd;	unsigned long offset;};#ifndef __s390x__void *__mmap2(void *addr, size_t len, int prot, int flags, int fd, long offset){	struct mmap_arg_struct args = {		.addr	= (unsigned long)addr,		.len	= (unsigned long)len,		.prot	= (unsigned long)prot,		.flags	= (unsigned long)flags,		.fd	= (unsigned long)fd,		.offset = (unsigned long)offset,	};	register struct mmap_arg_struct *__arg1 asm("2") = &args;	register long __svcres asm("2");	unsigned long __res;	__asm__ __volatile__("    svc %b1\n"			     : "=d"(__svcres)			     : "i"(__NR_mmap2), "0"(__arg1)			     : "1", "cc", "memory");	__res = __svcres;	if (__res >= (unsigned long)-4095) {		errno = -__res;		__res = -1;	}	return (void *)__res;}#else /* __s390x__ */void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset){	struct mmap_arg_struct args = {		.addr	= (unsigned long)addr,		.len	= (unsigned long)len,		.prot	= (unsigned long)prot,		.flags	= (unsigned long)flags,		.fd	= (unsigned long)fd,		.offset = (unsigned long)offset,	};	register struct mmap_arg_struct *__arg1 asm("2") = &args;	register long __svcres asm("2");	unsigned long __res;	__asm__ __volatile__ (		"    svc %b1\n"		: "=d" (__svcres)		: "i" (__NR_mmap),		  "0" (__arg1)		: "1", "cc", "memory");	__res = __svcres;	if (__res >= (unsigned long)-4095) {		errno = -__res;		__res = -1;	}	return (void *)__res;}#endif /* __s390x__ */

⌨️ 快捷键说明

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