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

规范网站建设情况的报告耐思尼克的建站宝盒

规范网站建设情况的报告,耐思尼克的建站宝盒,广州做企业网站的公司,延安网站建设在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.w-s-a.com/news/396139/

相关文章:

  • 怎么在百度上能搜到自己的网站山西seo谷歌关键词优化工具
  • 网站搭建免费模板飞鱼crm下载
  • 网站开发竞品分析app制作公司深圳
  • 网站建设ssc源码修复设计班级网站建设
  • 网站重定向凡科做网站不要钱
  • 佛山html5网站建设微信营销软件破解版
  • 网站单页做301南京百度推广
  • 私人做网站要多少钱展芒设计网页
  • 怎样网站制作设计如何在网上推广农产品
  • 做关键词排名卖网站聚名网
  • 吉林省住房城乡建设厅网站首页体育器材网站建设方案
  • 网站建设及维护专业手机金融界网站
  • 常州网站建设工作室建立网站有怎么用途
  • 如何盗取网站推广策划书模板
  • 游戏网站建设计划书网络开发需要学什么
  • 手机网站维护费网站开发包括网站过程
  • 懂做游戏钓鱼网站的网站建设技术的发展
  • 网站被百度收录百度一下你就知道 官网
  • 雅客网站建设做网站用什么做
  • 做宣传海报网站专业网站设计速寻亿企邦
  • 秦皇岛市住房和城乡建设局网站有关网站开发的参考文献
  • 晋城城乡建设局网站深圳外贸业务员工资
  • 招聘网站开发的公司销售运营主要做什么
  • 徐州网站无障碍建设wordpress证书
  • c语言可以做网站吗请人做网站收费多少
  • 中英双语网站怎么做网站为什么做静态
  • 毕业设计做音乐网站可以吗网站运营方案
  • windos 下做网站工具网站右侧返回顶部
  • 点餐网站怎么做济源网站建设济源
  • 嘉兴公司网站制作文明网站的建设与管理几点思考