peekpoke.c

来自「操作系统源代码」· C语言 代码 · 共 50 行

C
50
字号
/* Peek and poke using /dev/mem. * * Callers now ought to check the return values. * * Calling peek() requires read permission on /dev/mem, and consumes * a file descriptor.  Calling poke() requires write permission, and * consumes another file descriptor. */#include <sys/types.h>#include <fcntl.h>#include <unistd.h>_PROTOTYPE( int peek, (unsigned segment, unsigned offset));_PROTOTYPE( int poke, (unsigned segment, unsigned offset, unsigned value));#define SEGSIZE 0x10int peek(segment, offset)unsigned segment;unsigned offset;{  unsigned char chvalue;  static int infd = -1;  if (infd < 0) infd = open("/dev/mem", O_RDONLY);  if (infd < 0 ||      lseek(infd, (unsigned long) segment * SEGSIZE + offset, SEEK_SET) < 0 ||      read(infd, (char *) &chvalue, (unsigned) 1) != 1)	return(-1);  return(chvalue);}int poke(segment, offset, value)unsigned segment;unsigned offset;unsigned value;{  unsigned char chvalue;  static int outfd = -1;  chvalue = value;  if (outfd < 0) outfd = open("/dev/mem", O_WRONLY);  if (outfd < 0 ||      lseek(outfd, (unsigned long) segment * SEGSIZE + offset, SEEK_SET) < 0 ||      write(outfd, (char *) &chvalue, (unsigned) 1) != 1)	return(-1);  return(chvalue);}

⌨️ 快捷键说明

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