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

西安网站公司哪家好aspnet校友录网站开发

西安网站公司哪家好,aspnet校友录网站开发,修改wordpress后台文字,连接到wordpress文章目录 1、ioctl简介2、示例程序编写2.1、应用程序编写2.2、驱动程序编写 3、ioctl命令的构成4、测试 1、ioctl简介 ioctl#xff08;input/output control#xff09;是Linux中的一个系统调用#xff0c;主要用于设备驱动程序与用户空间应用程序之间进行设备特定的输入/… 文章目录 1、ioctl简介2、示例程序编写2.1、应用程序编写2.2、驱动程序编写 3、ioctl命令的构成4、测试 1、ioctl简介 ioctlinput/output control是Linux中的一个系统调用主要用于设备驱动程序与用户空间应用程序之间进行设备特定的输入/输出操作。它提供了一种通用的机制允许用户空间的应用程序通过文件描述符与设备进行交互以执行标准文件操作如读取、写入、打开和关闭之外的特殊操作。 2、示例程序编写 本次示例程序包括应用程序和驱动程序。 2.1、应用程序编写 应用程序中将用户输入的数据通过ioctl()传入到驱动程序并通过ioctl()读取出来。 /* ioc_test.c */#include sys/ioctl.h #include fcntl.h #include stdio.h #include stdlib.h #include unistd.h// 定义设备类型和 ioctl 命令 #define IOC_MAGIC M #define MY_IOCTL_GET_PARAM _IOR(IOC_MAGIC, 0, int) #define MY_IOCTL_SET_PARAM _IOW(IOC_MAGIC, 1, int)int main() {int fd;int param;int getparam;/* 1、打开设备节点 */fd open(/dev/ioc, O_RDWR);if (fd 0) {perror(open);return -1;}/* 2、获取用户输入 */ fprintf(stdout, entry the number : );scanf(%d, param);/* 3、写入参数 */if (ioctl(fd, MY_IOCTL_SET_PARAM, param) 0) {perror(ioctl);close(fd);return -1;}/* 4、读出参数 */if (ioctl(fd, MY_IOCTL_GET_PARAM, getparam) 0) {perror(ioctl);close(fd);return -1;}fprintf(stdout, getparam %d\n, getparam);// 关闭文件close(fd);return 0; }2.2、驱动程序编写 重点主要有如下两个部分 1、file_operations中指定ioctl操作函数 static struct file_operations ioc_drv {.owner THIS_MODULE,.open ioc_drv_open,.read ioc_drv_read,.write ioc_drv_write,.release ioc_drv_close,.unlocked_ioctl my_device_ioctl, };2、填充ioctl函数 #define IOC_MAGIC M #define MY_IOCTL_GET_PARAM _IOR(IOC_MAGIC, 0, int) #define MY_IOCTL_SET_PARAM _IOW(IOC_MAGIC, 1, int)static long my_device_ioctl(struct file *file, unsigned int cmd, unsigned long arg) {static int param 0;switch (cmd) {/* 设置参数命令 */case MY_IOCTL_SET_PARAM:printk(KERN_INFO MY_IOCTL_SET_PARAM\n);if (copy_from_user(param, (int __user *)arg, sizeof(param))) {return -EFAULT;}printk(KERN_INFO my_device: set param to %d\n, param);break;/* 读取参数命令 */case MY_IOCTL_GET_PARAM:printk(KERN_INFO MY_IOCTL_GET_PARAM\n);if (copy_to_user((int __user *)arg, param, sizeof(param))) {return -EFAULT;}printk(KERN_INFO my_device: get param %d\n, param);break;default:return -EINVAL; }return 0; }3、完整的驱动程序如下 /* ioc_drv.c */#include linux/module.h#include linux/fs.h #include linux/errno.h #include linux/miscdevice.h #include linux/kernel.h #include linux/major.h #include linux/mutex.h #include linux/proc_fs.h #include linux/seq_file.h #include linux/stat.h #include linux/init.h #include linux/device.h #include linux/tty.h #include linux/kmod.h #include linux/gfp.hstatic int major 0; static struct class *ioc_class;#define IOC_MAGIC M #define MY_IOCTL_GET_PARAM _IOR(IOC_MAGIC, 0, int) #define MY_IOCTL_SET_PARAM _IOW(IOC_MAGIC, 1, int)static long my_device_ioctl(struct file *file, unsigned int cmd, unsigned long arg) {static int param 0;switch (cmd) {case MY_IOCTL_SET_PARAM:printk(KERN_INFO MY_IOCTL_SET_PARAM\n);if (copy_from_user(param, (int __user *)arg, sizeof(param))) {return -EFAULT;}printk(KERN_INFO my_device: set param to %d\n, param);break;case MY_IOCTL_GET_PARAM:printk(KERN_INFO MY_IOCTL_GET_PARAM\n);if (copy_to_user((int __user *)arg, param, sizeof(param))) {return -EFAULT;}printk(KERN_INFO my_device: get param %d\n, param);break;default:return -EINVAL; }return 0; }static ssize_t ioc_drv_read (struct file *file, char __user *buf, size_t size, loff_t *offset) {printk(%s %s line %d\n, __FILE__, __FUNCTION__, __LINE__);return 0; }static ssize_t ioc_drv_write (struct file *file, const char __user *buf, size_t size, loff_t *offset) {printk(%s %s line %d\n, __FILE__, __FUNCTION__, __LINE__);return 0; }static int ioc_drv_open (struct inode *node, struct file *file) {printk(%s %s line %d\n, __FILE__, __FUNCTION__, __LINE__);return 0; }static int ioc_drv_close (struct inode *node, struct file *file) {printk(%s %s line %d\n, __FILE__, __FUNCTION__, __LINE__);return 0; }static struct file_operations ioc_drv {.owner THIS_MODULE,.open ioc_drv_open,.read ioc_drv_read,.write ioc_drv_write,.release ioc_drv_close,.unlocked_ioctl my_device_ioctl, };static int __init ioc_init(void) {int err;printk(%s %s line %d\n, __FILE__, __FUNCTION__, __LINE__);major register_chrdev(0, ioc, ioc_drv);ioc_class class_create(THIS_MODULE, ioc_class);err PTR_ERR(ioc_class);if (IS_ERR(ioc_class)) {printk(%s %s line %d\n, __FILE__, __FUNCTION__, __LINE__);unregister_chrdev(major, ioc);return -1;}device_create(ioc_class, NULL, MKDEV(major, 0), NULL, ioc); /* /dev/ioc */return 0; }static void __exit ioc_exit(void) {printk(%s %s line %d\n, __FILE__, __FUNCTION__, __LINE__);device_destroy(ioc_class, MKDEV(major, 0));class_destroy(ioc_class);unregister_chrdev(major, ioc); }module_init(ioc_init); module_exit(ioc_exit);MODULE_LICENSE(GPL);3、ioctl命令的构成 一个完整的ioctl命令码通常包含以下几个字段 设备类型通常是8位用于标识设备或设备驱动程序的类型。这使得系统能够区分不同的设备或设备组。序列号也是8位在同一设备类型下用于区分不同的ioctl命令。每个命令都有一个唯一的序列号以确保命令的唯一性。方向位2位指示数据传输的方向。这可以是读操作、写操作或读写操作。方向位帮助设备驱动程序了解用户空间程序期望执行的操作类型。数据大小8~14位指定用户空间与内核空间之间传输的数据的大小。这确保了数据在传输过程中的完整性和一致性。 在Linux内核中为了简化ioctl命令的创建过程提供了一些宏定义。可以看到在上面的应用程序和驱动程序中都使用了宏来创建ioctl命令 #define IOC_MAGIC M #define MY_IOCTL_GET_PARAM _IOR(IOC_MAGIC, 0, int) #define MY_IOCTL_SET_PARAM _IOW(IOC_MAGIC, 1, int)可用的宏有如下 // _IO宏用于创建不带数据传输的ioctl命令 // type是设备类型通常是一个字符常量用于区分不同的设备或设备驱动程序 // nr是命令序号用于在同一设备类型下区分不同的命令 #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)// _IOR宏用于创建从设备读取数据的ioctl命令 // type和nr的含义与_IO宏相同 // size是数据类型大小 #define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))// _IOW宏用于创建向设备写入数据的ioctl命令 // 其他参数的含义与_IOR宏相同 #define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))// _IOWR宏用于创建既读取又写入数据的ioctl命令 // 其他参数的含义与_IOR和_IOW宏相同 #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))4、测试 1、编译驱动程序加载驱动程序。 2、编译应用程序运行应用程序。
http://www.dnsts.com.cn/news/85933.html

相关文章:

  • 用织梦软件如何做网站网站后台模板免费下载
  • 有哪些网站可以自己做加视频连云港建设工程质量监督站网站
  • 可以做众筹的网站有哪些温州品牌推广
  • 信用网站标准化建设方案wordpress移动顶部菜单
  • 营销单页网站百度h5制作软件下载
  • html5电影网站模板成都高端模板建站
  • 网站宣传与推广移动建站工具
  • asp网站安装教程wordpress菜单 标题属性
  • 国外网站卖货平台wordpress不停刷y
  • 做公司 网站建设价格低网络工程技术课设报告
  • 重庆建设工程查询网站专业微信网站
  • crm客户系统南通网站seo
  • 西安做网站的公司电话网站禁用右键
  • 网站推广品牌建设微官网登录入口
  • 厦门网络公司网站网站轮播广告代码
  • 安阳网站制作价格10大物业管理系统
  • 洛阳网站建设哪家便宜中国产品网网址
  • 崇州园区营销网站建设如何在各个购物网站之间做差价
  • 如何自建网站卖产品成功的网站建设
  • 正规网站备案代理做网站的html框架
  • pc网站模板中国建设银行官网站大同
  • 兰州网站程序建设杭州做搜索引擎网站的公司
  • 网站根验证文件在哪国家建设材料检测网站
  • php网站攻击网络广告营销推广
  • ps做网站页面设置为多大长沙市规划建设局网站
  • 阐述商业网站开发岗位需求分析汽车价格网
  • 为农村建设网站报告深圳联雅做网站怎么样
  • seo网站营销推广公司商城开发分销系统
  • 中国各大网站名称做合约交易哪个网站好
  • 多就能自己做网站优化合作平台