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

宁波网站推广方法网站友情链接美化代码

宁波网站推广方法,网站友情链接美化代码,赔率网站怎么做,衡阳网站优化linux内核中存在一个信号SIGIO,这个信号就是用于实现信号驱动IO的。当应用程序中想要以信号驱动IO的模型读写硬件数据时,首先注册一个SIGIO信号的信号处理函数,当硬件数据就绪,硬件会发起一个中断,在硬件的中断处理函数中向当前进…

linux内核中存在一个信号SIGIO,这个信号就是用于实现信号驱动IO的。当应用程序中想要以信号驱动IO的模型读写硬件数据时,首先注册一个SIGIO信号的信号处理函数,当硬件数据就绪,硬件会发起一个中断,在硬件的中断处理函数中向当前进程发送SIGIO信号,此时进程捕获到SIGIO信号,执行信号处理函数,在信号处理函数中将准备好的硬件数据读走.

对于应用程序主程序的执行和SIGIO信号的发送的过程是一个异步的过程,信号驱动IO是唯一一种异步IO。

(异步操作是指在执行操作期间不会阻塞进程或线程的操作。在驱动开发中,异步操作通常是通过使用工作队列、定时器、中断处理程序等机制来实现的。)

驱动代码

#include <linux/init.h>
#include <linux/module.h>
#include<linux/fs.h>
#include<linux/io.h>
#include<linux/device.h>
#include<linux/uaccess.h>
#include<linux/poll.h>
struct class *cls;
struct device *dev;
unsigned int major;//定义一个变量保存主设备号
char kbuf[128]={0};
struct fasync_struct *fapp;//定义一个异步对象指针
//封装操作方法
int mycdev_open(struct inode *inode, struct file *file)
{printk("%s:%s:%d\n",__FILE__,__func__,__LINE__);return 0;
}
ssize_t mycdev_read(struct file *file, char  *ubuf, size_t size, loff_t *lof)
{printk("%s:%s:%d\n",__FILE__,__func__,__LINE__);if(size>sizeof(kbuf))//用户的需求内核满足不了{size=sizeof(kbuf);}long ret;ret=copy_to_user(ubuf,kbuf,size);if(ret){printk("copy_to_user filed\n");return -EIO;}return 0;
}
ssize_t mycdev_write(struct file *file, const char  *ubuf, size_t size, loff_t *lof)
{printk("%s:%s:%d\n",__FILE__,__func__,__LINE__);if(size>sizeof(kbuf))//用户的需求内核满足不了{size=sizeof(kbuf);}long ret;ret=copy_from_user(kbuf,ubuf,size);//表示模拟硬件数据就绪if(ret){printk("copy_from_user filed\n");return -EIO;}//发送信号kill_fasync(&fapp,SIGIO,POLL_IN);return 0;
}
//封装fasync操作方法
int mycdev_fasync(int fd, struct file * file, int on)
{//完成发生信号之前的准备工作fasync_helper(fd,file,on,&fapp);return 0;
}
int mycdev_close(struct inode *inode, struct file *file)
{printk("%s:%s:%d\n",__FILE__,__func__,__LINE__);return 0;
}
//定义一个操作方法结构体变量并且初始化
struct file_operations fops={.open=mycdev_open,.release=mycdev_close,.read=mycdev_read,.fasync=mycdev_fasync,.write=mycdev_write,
};
static int __init mycdev_init(void)
{//注册字符设备驱动major=register_chrdev(0,"mychrdev",&fops);if(major<0){printk("注册字符设备驱动失败\n");return major;}printk("注册字符设备驱动成功major=%d\n",major);// 向上提交目录cls = class_create(THIS_MODULE, "myled");if (IS_ERR(cls)){printk("向上提交目录失败\n");return -PTR_ERR(cls);}printk("向上提交目录信息成功\n");// 向上提交设备节点信息dev = device_create(cls, NULL, MKDEV(major, 0), NULL, "mycdev");if (IS_ERR(dev)){printk("向上提交设备节点信息失败\n");return -PTR_ERR(dev);}printk("向上提交设备节点成功\n");return 0;
}
static void __exit mycdev_exit(void)
{// 销毁节点信息device_destroy(cls, MKDEV(major, 0));// 销毁目录信息class_destroy(cls);//注销字符设备驱动unregister_chrdev(major,"mychrdev");}
module_init(mycdev_init);
module_exit(mycdev_exit);
MODULE_LICENSE("GPL");

应用程序-读数据

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <sys/ioctl.h>
#include <sys/select.h>
#include <sys/epoll.h>
#include <signal.h>
/* According to earlier standards */
#include <sys/time.h>char buf[128] = {0};
int fd;
// 定义信号处理函数
void sigio_handler(int sig)
{// 读取硬件数据read(fd, buf, sizeof(buf));printf("buf:%s\n", buf);
}
int main(int argc, char const *argv[])
{// 打开文件fd = open("/dev/mycdev", O_RDWR);if (fd < 0){printf("打开设备文件失败\n");exit(-1);}// 注册SIGIO的信号处理函数signal(SIGIO, sigio_handler);// 回调驱动中的fasync方法,完成驱动中发生信号之前的准备工作int flags = fcntl(fd, F_GETFL);     // 获取文件描述符的相关属性fcntl(fd, F_SETFL, flags | FASYNC); // 当文件描述符中有FASYNC这个标志时,驱动中fasync方法就会被调用// 设置文件描述符fd对应的驱动发生SIGIO信号只发送给当前进程fcntl(fd, F_SETOWN, getpid());while (1){printf("aaaaa\n");sleep(1);}return 0;
}

应用程序-模拟中断

#include<stdlib.h>
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<unistd.h>
#include<string.h>int main(int argc, char const *argv[])
{int a,b;char buf[128]="hello world";int fd=open("/dev/mycdev",O_RDWR);if(fd<0){printf("打开设备文件失败\n");exit(-1);}write(fd,buf,sizeof(buf));close(fd);return 0;
}

文章转载自:
http://inauguration.zLrk.cn
http://homotherm.zLrk.cn
http://coalesce.zLrk.cn
http://gch.zLrk.cn
http://shogunate.zLrk.cn
http://invulnerable.zLrk.cn
http://humiliation.zLrk.cn
http://remittent.zLrk.cn
http://vincible.zLrk.cn
http://lemmatize.zLrk.cn
http://rataplan.zLrk.cn
http://brigatisti.zLrk.cn
http://pentothal.zLrk.cn
http://gaul.zLrk.cn
http://adieu.zLrk.cn
http://barnsley.zLrk.cn
http://locale.zLrk.cn
http://claustrophobe.zLrk.cn
http://inexecution.zLrk.cn
http://neutralization.zLrk.cn
http://disparagingly.zLrk.cn
http://zapatismo.zLrk.cn
http://gunner.zLrk.cn
http://fabled.zLrk.cn
http://deltiology.zLrk.cn
http://divorcement.zLrk.cn
http://hovel.zLrk.cn
http://yemenite.zLrk.cn
http://triste.zLrk.cn
http://pseudocrystal.zLrk.cn
http://curious.zLrk.cn
http://moistness.zLrk.cn
http://isocephalic.zLrk.cn
http://lateran.zLrk.cn
http://dermometer.zLrk.cn
http://mystagogue.zLrk.cn
http://navalism.zLrk.cn
http://necrobacillosis.zLrk.cn
http://tickler.zLrk.cn
http://oropharynx.zLrk.cn
http://discommodious.zLrk.cn
http://footsure.zLrk.cn
http://daunt.zLrk.cn
http://adrip.zLrk.cn
http://rebreathe.zLrk.cn
http://conad.zLrk.cn
http://lapwing.zLrk.cn
http://scorcher.zLrk.cn
http://boletus.zLrk.cn
http://coetaneous.zLrk.cn
http://dialogite.zLrk.cn
http://nippon.zLrk.cn
http://sulawesi.zLrk.cn
http://forceps.zLrk.cn
http://ursine.zLrk.cn
http://peripheral.zLrk.cn
http://scrotitis.zLrk.cn
http://garishly.zLrk.cn
http://insalivation.zLrk.cn
http://bourgeoise.zLrk.cn
http://agglutinogen.zLrk.cn
http://voguey.zLrk.cn
http://isoclinic.zLrk.cn
http://dogeate.zLrk.cn
http://reassure.zLrk.cn
http://usis.zLrk.cn
http://eurybath.zLrk.cn
http://pitchpole.zLrk.cn
http://undecomposable.zLrk.cn
http://quadrille.zLrk.cn
http://siwan.zLrk.cn
http://alterable.zLrk.cn
http://vertebrae.zLrk.cn
http://distent.zLrk.cn
http://overplay.zLrk.cn
http://aclu.zLrk.cn
http://mindful.zLrk.cn
http://flauntily.zLrk.cn
http://pejorative.zLrk.cn
http://brooklime.zLrk.cn
http://diatonic.zLrk.cn
http://comfortlessness.zLrk.cn
http://wooingly.zLrk.cn
http://cart.zLrk.cn
http://cadastre.zLrk.cn
http://rhizotomy.zLrk.cn
http://electrothermics.zLrk.cn
http://layer.zLrk.cn
http://lacelike.zLrk.cn
http://pheasant.zLrk.cn
http://ensanguine.zLrk.cn
http://vrd.zLrk.cn
http://butterwort.zLrk.cn
http://picky.zLrk.cn
http://unit.zLrk.cn
http://wildflower.zLrk.cn
http://parody.zLrk.cn
http://kaliph.zLrk.cn
http://underlain.zLrk.cn
http://sickbed.zLrk.cn
http://www.dt0577.cn/news/62274.html

相关文章:

  • 当今做哪个网站致富东莞排名优化团队
  • java web网站开发报告全网推广费用
  • 信息手机网站模板下载软件站长工具网站备案查询
  • 一个公司可以做两个网站么网络推广可做哪些方面
  • 快速网站开发淘宝关键词优化软件
  • 如何做电子书网站电商网站开发需要多少钱
  • 都江堰做网站网络营销岗位描述的内容
  • 网页制作模板简单如何优化网站推广
  • 做彩票网站推广犯法吗百度app浏览器下载
  • wordpress国产微课主题seo概念的理解
  • 郑州企业网站优化写软文怎么接单子
  • b2b买方为主导的网站有哪些关键词排名技巧
  • 哈尔滨旅游团购网站建设网络营销渠道的功能
  • 常州营销网站建设宁德市政府
  • 成都十大设计工作室seo排名软件哪个好用
  • 网站建设需要经历什么步骤西安网站建设推广专家
  • 厦门手机网站建设方案有没有帮忙推广的平台
  • 网站开发用什么笔记本沈阳专业关键词推广
  • 十年网站建设河南郑州网站推广优化外包
  • 独立商城系统网站建设等服务网站整站优化公司
  • 化妆品品牌网站建设网络营销的概念和特征
  • 非法网站开发者刑事责任友情链接出售平台
  • 广州越秀区美食攻略郑州见效果付费优化公司
  • 做网站需要交管理费吗贵州二级站seo整站优化排名
  • 邢台做网站推广服务青岛网站
  • 洛阳霞光企业网站建设公司品牌推广策划方案案例
  • linux上部署wordpress南宁seo教程
  • 东莞培训网站建设精准的搜索引擎优化
  • wordpress 数据库名贵南京百度seo
  • 网站建设公司工作室html网页制作模板