OpenBSD可加载内核模块编程完全指南(9) dev_t dev; u_long cmd; caddr_t data; int fflag; struct proc *p; { struct ourdev_io *d; int error = 0; switch(cmd) { case ODREAD: d = (struct ourdev_io *)data; d->value = dio.value; error = copyoutstr(&dio.msg, d->msg, MAXMSGLEN - 1, NULL); break; case ODWRITE: if ((fflag & FWRITE) == 0) return(EPERM); d = (struct ourdev_io *)data; dio.value = d->value; bzero(&dio.msg, MAXMSGLEN); error = copyinstr(d->msg, &dio.msg, MAXMSGLEN - 1, NULL);