| 
		    
                    
   poll()函数 poll 方法是poll 和select 这两个系统调用的后端实现,用来查询设备是否可读或可写,或是否处于某种特殊状态,原型为:
  
 
    
        
            | unsigned int (*poll) (struct file *, struct poll_table_struct *); | 
         
    
 
  我们将在"设备的阻塞与非阻塞操作"一节对该函数进行更深入的介绍。 
  设备"gobalvar"的驱动程序的这些函数应分别命名为gobalvar_open、gobalvar_ release、gobalvar_read、gobalvar_write、gobalvar_ioctl,因此设备"gobalvar"的基本入口点结构变量gobalvar_fops 赋值如下: 
 
    
        
            struct file_operations gobalvar_fops = {  read: gobalvar_read,  write: gobalvar_write, }; | 
         
    
 
  上述代码中对gobalvar_fops的初始化方法并不是标准C所支持的,属于GNU扩展语法。 
  完整的globalvar.c文件源代码如下: 
 
    
        
            | 
             #include <linux/module.h> #include <linux/init.h> #include <linux/fs.h> #include <asm/uaccess.h>  MODULE_LICENSE("GPL");
  #define MAJOR_NUM 254 //主设备号
  static ssize_t globalvar_read(struct file *, char *, size_t, loff_t*); static ssize_t globalvar_write(struct file *, const char *, size_t, loff_t*);
  //初始化字符设备驱动的file_operations结构体 struct file_operations globalvar_fops = {  read: globalvar_read, write: globalvar_write, }; static int global_var = 0; //"globalvar"设备的全局变量
  static int __init globalvar_init(void) {  int ret;
   //注册设备驱动  ret = register_chrdev(MAJOR_NUM, "globalvar", &globalvar_fops);  if (ret)  {   printk("globalvar register failure");  }  else  {   printk("globalvar register success");  }  return ret; } 
             | 
         
    
 
		    
                       
		      
		      
		   |