⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 peekpoke.c

📁 minux的源代码,一个非常小的操作系统
💻 C
字号:
/* 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 0x10

int 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -