当前位置: 首页 > news >正文

iis怎么给网站设置权限企业域名怎么填写

iis怎么给网站设置权限,企业域名怎么填写,模版和模板的区别,网站描述范例使用设备之前我们通常都需要调用 open 函数#xff0c;这个函数一般用于设备专有数据的初始化#xff0c;申请相关资源及进行设备的初始化等工作#xff0c;对于简单的设备而言#xff0c;open 函数可以不做具体的工作#xff0c;你在应用层通过系统调用 open 打开设备… 使用设备之前我们通常都需要调用 open 函数这个函数一般用于设备专有数据的初始化申请相关资源及进行设备的初始化等工作对于简单的设备而言open 函数可以不做具体的工作你在应用层通过系统调用 open 打开设备时如果打开正常就会得到该设备的文件描述符之后我们就可以通过该描述符对设备进行 read 和 write 等操作 open 函数到底做了些什么工作下图中列出了 open 函数执行的大致过程。 户空间使用 open() 系统调用函数打开一个字符设备时 (int fd open( “ dev/xxx ” , O_RDWR)) 大致 有以下过程 • 在虚拟文件系统 VFS 中的查找对应与字符设备对应 struct inode 节点 • 遍历散列表 cdev_map 根据 inod 节点中的 cdev_t 设备号找到 cdev 对象 • 创建 struct file 对象系统采用一个数组来管理一个进程中的多个被打开的设备每个文件 秒速符作为数组下标标识了一个设备对象 • 初始化 struct file 对象将 struct file 对象中的 file_operations 成员指向 struct cdev 对象中的 file_operations 成员 file-fops cdev-fops • 回调 file-fops-open 函数 我们使用的 open 函数在内核中对应的是 sys_open 函数 sys_open 函数又会调用 do_sys_open 函 数。在 do_sys_open 函数中首先调用函数 get_unused_fd_flags 来获取一个未被使用的文件描述符 fd该文件描述符就是我们最终通过 open 函数得到的值。紧接着又调用了 do_filp_open 函数 该函数通过调用函数 get_empty_filp 得到一个新的 file 结构体之后的代码做了许多复杂的工作 如解析文件路径查找该文件的文件节点 inode 等直接来到了函数 do_dentry_open 函数如下 所示。 //do_dentry_open 函数内核源码/fs/open.cstatic int do_dentry_open(struct file *f,struct inode *inode,int(*open)(struct inode *, struct file *),const struct cred *cred) {……f-f_op fops_get(inode-i_fop);……if (!open)open f-f_op-open;if (open) {error open(inode, f);if (error)goto cleanup_all;}…… } • 第 4 行使用 fops_get 函数来获取该文件节点 inode 的成员变量 i_fop 我们使用 mknod 创建字符设备文件时将 def_chr_fops 结构体赋值给了该设备文件 inode 的 i_fop 成 员。 • 第 7 行到了这里我们新建的 file 结构体的成员 f_op 就指向了 def_chr_fops 。 注def_chr_fops 是字符设备通用的操作函数类比于我们自己在写驱动程序时的file_operation // def_chr_fops 结构体内核源码/fs/char_dev.cconst struct file_operations def_chr_fops {.open chrdev_open,.llseek noop_llseek, }; 最终会执行 def_chr_fops 中的 open 函数也就是 chrdev_open 函数可以理解为一个字符设备的通用初始化函数根据字符设备的设备号找到相应的字符设备从而得到操作该设备的方法。 //chrdev_open 函数内核源码/fs/char_dev.c static int chrdev_open(struct inode *inode, struct file *filp) {const struct file_operations *fops;struct cdev *p;struct cdev *new NULL;int ret 0;spin_lock(cdev_lock);p inode-i_cdev;if (!p) {struct kobject *kobj;int idx;spin_unlock(cdev_lock);kobj kobj_lookup(cdev_map, inode-i_rdev, idx);if (!kobj)return -ENXIO;new container_of(kobj, struct cdev, kobj);spin_lock(cdev_lock);/* Check i_cdev again in case somebody beat us to it whilewe dropped the lock.*/p inode-i_cdev;if (!p) {inode-i_cdev p new;list_add(inode-i_devices, p-list);new NULL;} else if (!cdev_get(p))ret -ENXIO;} else if (!cdev_get(p))ret -ENXIO;spin_unlock(cdev_lock);cdev_put(new);if (ret)return ret;ret -ENXIO;fops fops_get(p-ops);if (!fops)goto out_cdev_put;replace_fops(filp, fops);if (filp-f_op-open) {ret filp-f_op-open(inode, filp);if (ret)goto out_cdev_put;}return 0;out_cdev_put:cdev_put(p);return ret;} 函数 chrdev_open 最终将创建的文件结构体 file 的成员 f_op 替换成了 cdev 对应的 ops 成员并执行 ops 结构体中的 open 函数。 最后调用上图的 fd_install 函数完成文件描述符和文件结构体 file 的关联之后我们使用对该文件描述符 fd 调用 read 、 write 函数最终都会调用 file 结构体对应的函数实际上也就是调用cdev 结构体中 ops 结构体内的相关函数。 总结一下整个过程当我们使用 open 函数打开设备文件时会根据该设备的文件的设备号找到相应的设备结构体从而得到了操作该设备的方法。也就是说如果我们要添加一个新设备的话我们需要提供一个设备号一个设备结构体以及操作该设备的方法file_operations 结构体。
http://www.pierceye.com/news/467611/

相关文章:

  • 宿迁做网站公司哪家好中国建设监理协会化工监理协会网站
  • 网站建设广州天河常州企业自助建站系统
  • 厦门网站建设u贷款在线申请
  • 做肮脏交义的网站南宁住房和城乡建设局网站
  • 办网站需要什么my23777免费域名查询
  • 销售网站开发步骤网站域名到期了怎么办
  • 怎么做注册账号的网站网页打不开视频播放不了是什么问题
  • 江阴市住房和城乡建设局网站免费网页游戏poki
  • 个人网站设计网站建设的基本特点
  • 泉州专业做网站网站被k 原因
  • 18款禁用网站app直播建设部资质网站
  • 免费完整版的网站模板商丘行业网站建设开发公司
  • 网站与微网站区别推广通
  • 京东网站建设的意义wordpress美图
  • 佛山市外贸网站建设公司营销型网站建设 兼职
  • 四川省城乡与建设厅网站中国十大it培训机构排名
  • 国家高新技术企业查询网站汕头整站优化
  • asp网站生成静态在线网站软件免费下载
  • wordpress古腾堡编辑器广州建网站开发seo型企业网站
  • 易云巢做营销型网站wordpress下载视频播放器
  • google网站哪里找人做网站
  • 外贸网站建设如何做呢百度热搜风云榜
  • ASP网站建设实训报告总结山西建设公司网站
  • 网站建设使用的什么软件房屋设计风格
  • 厦门网站建设公司排名杭州小型网站建设服务
  • 西安建设主管部门官方网站中文搭建式软件开发工具
  • 南通网站建设论文网站首页导航栏怎么做
  • 建设网站的运行费包括什么北京市建设工程信息网安徽兴创
  • 我想在泉州做网站上上海网站设计
  • 百度seo网站优化一 网站开发体会