????????????????????????璞�????????????????璞�???1??????LANANA????????璞�??10?????????璞�??????????????????????????些??????????????泄???????谐??些???璞�???????????????????濉�

??1 ???????璞�??1????????璞�??

?????些?璞�?????????????????/dev/null???????璞�??????????????????????????些???璞�???婕�????????????????????泻??????????????1?????璞�???1??memory_fops?卸???????些??????????????锟�?

????driver/char/mem.c

static const struct file_operations memory_fops = {
 .open = memory_open??
 .llseek = noop_llseek??
};

???????泻???memory_open???????????????????璞�????????璞�??????????

static int memory_open(struct inode *inode?? struct file *filp)
{
 int minor;
 const struct memdev *dev;

 minor = iminor(inode); /* get the minor device number commented by guoqingbo */
 if (minor >= ARRAY_SIZE(devlist))
  return -ENXIO;

 dev = &devlist[minor];/* select the specific file_operations */
 if (!dev->fops)
  return -ENXIO;

 filp->f_op = dev->fops;
 if (dev->dev_info)
  filp->f_mapping->backing_dev_info = dev->dev_info;

 /* Is /dev/mem or /dev/kmem ? */
 if (dev->dev_info == &directly_mappable_cdev_bdi)
  filp->f_mode |= FMODE_UNSIGNED_OFFSET;

 if (dev->fops->open)  //open the device
  return dev->fops->open(inode?? filp);

 return 0;
}