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

广州番禺区地图高清版大图seo外包 杭州

广州番禺区地图高清版大图,seo外包 杭州,虾想网络定制,重庆装修公司最新排名在Linux字符设备驱动中#xff0c;即使是最简单的注册字符设备#xff0c;也存在注册失败的可能性#xff0c;因此在之前编写的驱动代码中采用检查函数返回值的方式#xff0c;确认函数是否成功执行 一、goto 语句 在编写驱动程序时#xff0c;驱动程序应该提供函数执行失…  在Linux字符设备驱动中即使是最简单的注册字符设备也存在注册失败的可能性因此在之前编写的驱动代码中采用检查函数返回值的方式确认函数是否成功执行 一、goto 语句 在编写驱动程序时驱动程序应该提供函数执行失败后处理的能力。如果驱动程序中函数执行失败了必须取消掉所有失败前的注册否则内核会处于一个不稳定的状态因为它包含了不存在代码的内部指针。在处理 Linux 错误时最好使用goto 语句goto 语句的使用示例如下所示 int init my_init_function(void) {int err;err register_this(ptr1, skull);if (err)goto fail_this;err register_that(ptr2, skull);if (err)goto fail_that;err register_those(ptr3, skull);if (err)goto fail_those;return 0;fail_those:unregister_that(ptr2, skull);fail_that:unregister_this(ptr1, skull);fail_this:return err; }在以上代码中试图注册 3 个虚构设备goto 语句在失败情况下使用对之前已经成功注册的设施进行注销。使用 goto 语句处理的时候应该遵循“先进后出”的原则。 二、IS_ERR() 对于任何一个指针来说必然存在三种情况一种是合法指针一种是NULL(也就是空指针)一种是错误指针(也就是无效指针)。在 Linux 内核中所谓的错误指针已经指向了内核空间的最后一页例如对于一个 64 位系统来说内核空间最后地址为0xffffffffffffffff那么最后一页的地址是 0xfffffffffffff000~0xffffffffffffffff这段地址是被保留的如果指针落在这段地址之内说明是错误的无效指针。   在 Linux 内核源码中实现了指针错误的处理机制相关的函数接口主要有IS_ERR()、PTR_ERR()、ERR_PTR()等其函数的源码在 include/linux/err.h 文件中如下所示 #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) (unsigned long)-MAX_ERRNO)static inline void * __must_check ERR_PTR(long error) {return (void *) error; }static inline long __must_check PTR_ERR(__force const void *ptr) {return (long) ptr; }static inline bool __must_check IS_ERR(__force const void *ptr) {return IS_ERR_VALUE((unsigned long)ptr); }static inline bool __must_check IS_ERR_OR_NULL(__force const void *ptr) {return unlikely(!ptr) || IS_ERR_VALUE((unsigned long)ptr); }如上所示在 Linux 源码中 IS_ERR()函数其实就是判断指针是否出错如果指针指向了内核空间的最后一页就说明指针是一个无效指针如果指针并不是落在内核空间的最后一页就说明这指针是有效的。无效的指针能表示成一种负数的错误码如果想知道这个指针是哪个错误码使用 PTR_ERR 函数转化。0xfffffffffffff000~0xffffffffffffffff 这段地址和Linux错误码是一一对应的内核错误码保存在 kernel\include\uapi\asm-generic\errno-base.h文件内 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ #ifndef _ASM_GENERIC_ERRNO_BASE_H #define _ASM_GENERIC_ERRNO_BASE_H#define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ #define EINTR 4 /* Interrupted system call */ #define EIO 5 /* I/O error */ #define ENXIO 6 /* No such device or address */ #define E2BIG 7 /* Argument list too long */ #define ENOEXEC 8 /* Exec format error */ #define EBADF 9 /* Bad file number */ #define ECHILD 10 /* No child processes */ #define EAGAIN 11 /* Try again */ #define ENOMEM 12 /* Out of memory */ #define EACCES 13 /* Permission denied */ #define EFAULT 14 /* Bad address */ #define ENOTBLK 15 /* Block device required */ #define EBUSY 16 /* Device or resource busy */ #define EEXIST 17 /* File exists */ #define EXDEV 18 /* Cross-device link */ #define ENODEV 19 /* No such device */ #define ENOTDIR 20 /* Not a directory */ #define EISDIR 21 /* Is a directory */ #define EINVAL 22 /* Invalid argument */ #define ENFILE 23 /* File table overflow */ #define EMFILE 24 /* Too many open files */ #define ENOTTY 25 /* Not a typewriter */ #define ETXTBSY 26 /* Text file busy */ #define EFBIG 27 /* File too large */ #define ENOSPC 28 /* No space left on device */ #define ESPIPE 29 /* Illegal seek */ #define EROFS 30 /* Read-only file system */ #define EMLINK 31 /* Too many links */ #define EPIPE 32 /* Broken pipe */ #define EDOM 33 /* Math argument out of domain of func */ #define ERANGE 34 /* Math result not representable */#endif对于IS_ERR()的使用实例代码如下所示 myclass class_create(THIS_MODULE, myclass); if (IS_ERR(myclass)) {ret PTR_ERR(myclass);goto fail; } mydevice device_create(myclass, NULL, MKDEV(major, 0), NULL, simple-device); if (IS_ERR(mydevice)) {class_destroy(myclass);ret PTR_ERR(mydevice);goto fail; }在上述代码中调用了 class_create()和 device_create()函数必须使用IS_ERR()函数判断返回的指针是否是有效的如果是无效的需要调用 PTR_ERR()函数将无效指针转换为错误码并进行错误码的返回。
http://www.hkea.cn/news/14304183/

相关文章:

  • 网站颜色搭配实例网页版微信登录显示二维码已失效
  • 网站怎么做才能将名声打响珠宝网站建设公司
  • 注册网站有什么用网站推广 软件
  • 顺义做网站的厂家杭州网站建设响应式
  • 鲜花团购网站建设广州汽车网络推广服务
  • 购物网站后台模板网站推广策划案
  • 网站备案号 查询在手机上怎么制作网站
  • 苏州大型网站建设公司解决wordpress后台加载非常缓慢
  • 湖北省建设厅网站怎么打不开广州建站快车
  • 建设网站书陕西网站建设品牌公司推荐
  • 免费网站建设排行榜wordpress的文章置顶有什么用
  • 太原网站制作小程序郑州制作网站推荐
  • 用什么软件上传网站网站开发的四个高级阶段包括
  • 湖北聚四方建设有限公司网站谁给个能用的网址
  • 做普通网站公司wordpress 漏洞 修复
  • 网站商城建设的维度免费电子版个人简历可编辑
  • 微信企业网站 源码下载wordpress插件数据存放
  • 企业网站制作费做分录贵州省冶金建设有限公司网站
  • 长沙制作网站公司wordpress分类页面添加幻灯片
  • 东莞外贸网站建设策划方案flash型网站网址
  • 站长工具seo源码有网络但是网页打不开
  • 响应式网站有什么好处wordpress统计查看
  • 个人做网站模版是否有人买个性化网站建设公司电话
  • 网站描述如何写利于优化搭建购物商城
  • 北京专业网站营销图标设计免费logo在线生成
  • 高校网站建设目的县城做信息网站
  • 网站微信建设运维培训班网站备案渝
  • 陕西住房和城乡建设部网站首页博客网
  • 网站建设分为哪三部分有经验的中山网站建设
  • 企业网站搜索引擎拓客济南建设集团网站