📄 kmem.c
字号:
/* * Copyright (C) 1993-2000 by Darren Reed. * * Redistribution and use in source and binary forms are permitted * provided that this notice is preserved and due credit is given * to the original author and the contributors. *//* * kmemcpy() - copies n bytes from kernel memory into user buffer. * returns 0 on success, -1 on error. */#include <stdio.h>#include <sys/types.h>#include <sys/uio.h>#include <unistd.h>#include <fcntl.h>#include <sys/file.h>#include "kmem.h"#if !defined(lint)static const char sccsid[] = "@(#)kmem.c 1.4 1/12/96 (C) 1992 Darren Reed";static const char rcsid[] = "@(#)$Id: kmem.c,v 2.2 2000/03/13 22:10:25 darrenr Exp $";#endifstatic int kmemfd = -1;int openkmem(){ if ((kmemfd = open(KMEM,O_RDONLY)) == -1) { perror("kmeminit:open"); return -1; } return kmemfd;}int kmemcpy(buf, pos, n)register char *buf;long pos;register int n;{ register int r; if (!n) return 0; if (kmemfd == -1) if (openkmem() == -1) return -1; if (lseek(kmemfd, pos, 0) == -1) { perror("kmemcpy:lseek"); return -1; } while ((r = read(kmemfd, buf, n)) < n) if (r <= 0) { perror("kmemcpy:read"); return -1; } else { buf += r; n -= r; } return 0;}int kstrncpy(buf, pos, n)register char *buf;long pos;register int n;{ register int r; if (!n) return 0; if (kmemfd == -1) if (openkmem() == -1) return -1; if (lseek(kmemfd, pos, 0) == -1) { perror("kmemcpy:lseek"); return -1; } while (n > 0) { r = read(kmemfd, buf, 1); if (r <= 0) { perror("kmemcpy:read"); return -1; } else { if (*buf == '\0') break; buf++; n--; } } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -