中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

標題優(yōu)化方法郴州seo快速排名

標題優(yōu)化方法,郴州seo快速排名,農(nóng)產(chǎn)品期貨交易平臺app,網(wǎng)站 如何 備案linux內(nèi)核中存在一個信號SIGIO,這個信號就是用于實現(xiàn)信號驅(qū)動IO的。當應(yīng)用程序中想要以信號驅(qū)動IO的模型讀寫硬件數(shù)據(jù)時,首先注冊一個SIGIO信號的信號處理函數(shù),當硬件數(shù)據(jù)就緒,硬件會發(fā)起一個中斷,在硬件的中斷處理函數(shù)中向當前進…

linux內(nèi)核中存在一個信號SIGIO,這個信號就是用于實現(xiàn)信號驅(qū)動IO的。當應(yīng)用程序中想要以信號驅(qū)動IO的模型讀寫硬件數(shù)據(jù)時,首先注冊一個SIGIO信號的信號處理函數(shù),當硬件數(shù)據(jù)就緒,硬件會發(fā)起一個中斷,在硬件的中斷處理函數(shù)中向當前進程發(fā)送SIGIO信號,此時進程捕獲到SIGIO信號,執(zhí)行信號處理函數(shù),在信號處理函數(shù)中將準備好的硬件數(shù)據(jù)讀走.

對于應(yīng)用程序主程序的執(zhí)行和SIGIO信號的發(fā)送的過程是一個異步的過程,信號驅(qū)動IO是唯一一種異步IO。

(異步操作是指在執(zhí)行操作期間不會阻塞進程或線程的操作。在驅(qū)動開發(fā)中,異步操作通常是通過使用工作隊列、定時器、中斷處理程序等機制來實現(xiàn)的。)

驅(qū)動代碼

#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;//定義一個變量保存主設(shè)備號
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))//用戶的需求內(nèi)核滿足不了{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))//用戶的需求內(nèi)核滿足不了{size=sizeof(kbuf);}long ret;ret=copy_from_user(kbuf,ubuf,size);//表示模擬硬件數(shù)據(jù)就緒if(ret){printk("copy_from_user filed\n");return -EIO;}//發(fā)送信號kill_fasync(&fapp,SIGIO,POLL_IN);return 0;
}
//封裝fasync操作方法
int mycdev_fasync(int fd, struct file * file, int on)
{//完成發(fā)生信號之前的準備工作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;
}
//定義一個操作方法結(jié)構(gòu)體變量并且初始化
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)
{//注冊字符設(shè)備驅(qū)動major=register_chrdev(0,"mychrdev",&fops);if(major<0){printk("注冊字符設(shè)備驅(qū)動失敗\n");return major;}printk("注冊字符設(shè)備驅(qū)動成功major=%d\n",major);// 向上提交目錄cls = class_create(THIS_MODULE, "myled");if (IS_ERR(cls)){printk("向上提交目錄失敗\n");return -PTR_ERR(cls);}printk("向上提交目錄信息成功\n");// 向上提交設(shè)備節(jié)點信息dev = device_create(cls, NULL, MKDEV(major, 0), NULL, "mycdev");if (IS_ERR(dev)){printk("向上提交設(shè)備節(jié)點信息失敗\n");return -PTR_ERR(dev);}printk("向上提交設(shè)備節(jié)點成功\n");return 0;
}
static void __exit mycdev_exit(void)
{// 銷毀節(jié)點信息device_destroy(cls, MKDEV(major, 0));// 銷毀目錄信息class_destroy(cls);//注銷字符設(shè)備驅(qū)動unregister_chrdev(major,"mychrdev");}
module_init(mycdev_init);
module_exit(mycdev_exit);
MODULE_LICENSE("GPL");

應(yīng)用程序-讀數(shù)據(jù)

#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;
// 定義信號處理函數(shù)
void sigio_handler(int sig)
{// 讀取硬件數(shù)據(jù)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("打開設(shè)備文件失敗\n");exit(-1);}// 注冊SIGIO的信號處理函數(shù)signal(SIGIO, sigio_handler);// 回調(diào)驅(qū)動中的fasync方法,完成驅(qū)動中發(fā)生信號之前的準備工作int flags = fcntl(fd, F_GETFL);     // 獲取文件描述符的相關(guān)屬性fcntl(fd, F_SETFL, flags | FASYNC); // 當文件描述符中有FASYNC這個標志時,驅(qū)動中fasync方法就會被調(diào)用// 設(shè)置文件描述符fd對應(yīng)的驅(qū)動發(fā)生SIGIO信號只發(fā)送給當前進程fcntl(fd, F_SETOWN, getpid());while (1){printf("aaaaa\n");sleep(1);}return 0;
}

應(yīng)用程序-模擬中斷

#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("打開設(shè)備文件失敗\n");exit(-1);}write(fd,buf,sizeof(buf));close(fd);return 0;
}
http://www.risenshineclean.com/news/46347.html

相關(guān)文章:

  • 今日濮陽重大新聞seo優(yōu)化服務(wù)是什么意思
  • asp.net做的網(wǎng)站要放到網(wǎng)上空間去_要放哪些文件上去網(wǎng)站建網(wǎng)站建設(shè)網(wǎng)站
  • 房山新農(nóng)村建設(shè)網(wǎng)站深圳百度seo公司
  • 免費代理ip的網(wǎng)站百度搜索推廣操作簡要流程
  • 如何進行網(wǎng)站運營與規(guī)劃打開百度網(wǎng)頁
  • 國外做批發(fā)配件的 在哪個網(wǎng)站百度葷seo公司
  • 傳奇網(wǎng)站怎么制作教程查關(guān)鍵詞
  • windows做網(wǎng)站服務(wù)器杭州推廣公司
  • 什么是網(wǎng)站功能需求推推蛙品牌策劃
  • 有服務(wù)器可以做網(wǎng)站嗎站長工具是什么意思
  • 商業(yè)網(wǎng)站建立搜索引擎優(yōu)化seo應(yīng)用
  • 中國三農(nóng)建設(shè)工作委員會官方網(wǎng)站深圳網(wǎng)絡(luò)推廣最新招聘
  • 云服務(wù)器可以做網(wǎng)站嗎網(wǎng)絡(luò)營銷的一般流程
  • 知名企業(yè)網(wǎng)站建設(shè)哈爾濱網(wǎng)站制作軟件
  • 做鋼材的網(wǎng)站有哪些網(wǎng)站的網(wǎng)站建設(shè)
  • 個人網(wǎng)站畢業(yè)設(shè)計搜索關(guān)鍵詞然后排名怎樣提升
  • 國外兒童社區(qū)網(wǎng)站模板外鏈信息
  • 做微網(wǎng)站迅宇科技網(wǎng)店推廣是什么
  • 做網(wǎng)站的不給做robots文件百度推廣登錄后臺
  • 在百度上做網(wǎng)站多少錢百度收錄提交
  • 杭州旅游 網(wǎng)站建設(shè)必應(yīng)搜索引擎地址
  • 一個網(wǎng)站可以做多少個小程序營銷推廣方案
  • 做301跳轉(zhuǎn)會影響之前網(wǎng)站排名嗎上海谷歌推廣
  • 在國外網(wǎng)站做中國旅游推廣百度關(guān)鍵詞熱度排名
  • 什么專業(yè)可以做網(wǎng)站百度店鋪免費入駐
  • 學校定制網(wǎng)站建設(shè)公司深圳優(yōu)化公司高粱seo較
  • 網(wǎng)站建設(shè)注冊密碼咋弄百度一下百度百科
  • 做網(wǎng)頁靠哪個網(wǎng)站賺錢湖南競價優(yōu)化哪家好
  • 服務(wù)器租用網(wǎng)站搜索關(guān)鍵詞排名優(yōu)化軟件
  • 網(wǎng)站 申請百度在線客服中心