- 博客(11)
- 收藏
- 关注
原创 NodeJs基础笔记
1.模块化开发1-1 JS开发两大弊端文件依赖后引入的可能会依赖先引入的js文件,但不确定是否依赖,因此要使用一个js文件时,不确定它是否依赖别的js文件。node可以用非人为的方式来确定依赖关系命名冲突不同的文件中声明同名变量,导致程序隐藏潜在的不确定性,也就是程序不健壮。node模块化的文件爱你只开放需要的代码,半封闭状态1-2 模块化开发规范A模块(a.js):exports.func1 = func1;exports.var1 = var1;…B模块引用A模块:ma =
2021-04-15 00:29:07 187 1
原创 经典驱动案例分析-V4L2的Camera子系统
一 简介1 V4L2定义:V4L2(Video ForLinux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。核心:v4L2的核心源码位于drivers/media/v4l2-core应用:V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。基础结构:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(
2021-04-14 23:22:12 804
原创 异步通知队列的原理和应用
1 引入根据不同的需求和使用场景,Linux内核支持几种不同的I/O操作模式,称为字符设备的IO模型,这些模型根据同步与异步、阻塞与非阻塞可以划分为四大类,如下表阻塞非阻塞同步read/writeread/write(O_NONBLOCK)异步poll/select/epollAIO、fasync对于异步非阻塞I/O其实内核提供了两种实现一个是aio,另一个就是fasync。我们这次主要讲的是fasync上一组讲的多路复用的I/O模型在应用程序与内核通信时本质
2021-04-14 23:16:50 570
原创 访问字符驱动流程
当应用程序调用open时:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mtLJxX7f-1618413263831)(C:\Users\Administrator.DESKTOP-ECPA524\AppData\Roaming\Typora\typora-user-images\image-20210318235701610.png)]open对应的系统调用号被保存到寄存器中调用swi,触发一个软中断异常swi是汇编中的一个指令,可以将处理器模式从用户模式变
2021-04-14 23:14:53 104
原创 Linux内核编译更新
一 配置的目的及作用决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。自己定制编译的内核运行更快(具有更少的代码)系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些二 内核的编译与安装1 环境准备ubuntu版本:2004原来的内核版本:5.8.0待编译的内核版本:4.4.259正式编译前先安装一些软件:sudo apt update &&am
2021-04-14 23:11:56 284
原创 公钥证书简介
1 概念在网络传输当中,一般是服务器与客户相互交流通信。但是他们通信的内容如果没有加密措施,就很容易被黑客获取。黑客可能会窃取服务端与客户的通信内容,甚至还可能冒充服务端或者客户端。因此必须要对网络传输的内容进行加密由此引出以下的几个概念:1.1 密钥密钥就相当于钥匙,不过密钥中的钥读作yue(四声)。密钥一般就是一个字符串或数字。可以用来加密,也可以用来解密。在加密或解密时,光有密钥当然不行,还需要加密算法或者解密算法。加密算法分为两个大类:对称加密和非对称加密1.2对称加密在对称加密算法中
2021-04-14 23:09:03 7221 3
原创 新词的发现方法
0 新词识别的任务候选新词的提取由于中文是由单个语素无间隔的组合形成,理论上来说,任意语素之间都有结合形成一个词或单语素成词的可能,因此词语边界的确定就成为一个问题,当然这也是需要中文分词的原因。候选新词的过滤对于候选新词,用什么标准判断这是一个符合条件的词,即是候选字符串必须是“新”的且能称为一个“词”新词的词性猜测1 基于规则的新词识别基于规则的方法一般通过语言专家根据构词学原理、配合语义信息或词性信息来构造模板,然后匹配新词。优点:准确率高, 针对性强,缺点:手工编写
2021-04-14 23:06:40 504
原创 用户与内核的交互-内核向用户程序发起交互的方式
1 使用brkbrk是Linux中的一个系统调用,用于分配空间。在C语言中使用malloc时,内部一般使用的就是brk这个系统调用来分配。当然,我们也可以使用brk()函数来分配空间或释放空间。这个函数在<unistd.h>这个头文件中。#include <stdio.h>#include <unistd.h>int main(){ void* p = sbrk(0);//首先获取一个地址,但仅仅是地址而没有分配空间 int* p1 = (int*
2021-04-14 22:59:09 299
原创 用户与内核的交互-用户程序向内核发起交互的方式
1 系统调用1-1 概念用户进程在通常情况下不允许访问内核数据,也无法使用内核函数。用户只能在用户空间操作用户数据、调用用户空间函数。比如我们熟悉的“hello world”程序执行时就是标准的用户空间进程,它使用的打印函数printf就属于用户空间函数,打印的字符“hello word”字符串也属于用户空间数据。但是很多情况下,用户进程需要获得系统服务(调用系统程序),就可以使用系统调用。比如用户想要请求系统打开文件、关闭文件或读写文件,就可以通过文件系统相关的系统调用来做到。用户想要获得系统时间或
2021-04-14 22:58:06 1445
原创 调试C语言程序-使用日志的方式
1自定义日志调试1-1引入#include <stdio.h>int fact(int n){ int i,f=1; for( i=1; i<=n; i++){ f += i; } return f;}int main(){ printf( "4!=%d\n", fact(4) ); return 0;}输出结果为:4!=11与预期的结果不同,因此我们要对程序进行调试我们在调试程序时,输出调试信息(又称为”打
2021-04-14 15:07:45 392
原创 Vim基本配置-适合C语言开发
1、工具安装1)安装Vundle在配置适合c开发的配置方案之前,可以先安装一个强大好用的插件管理工具。因为像要想编程顺畅,少不了要安装插件。在这里我们选择了一个插件管理工具:Vundle。首先是安装vundle。在linux命令窗下输入命令:git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle这里用到了另一个工具叫git,是用来把github上的插件克隆安装到linux中的工具。如果没有这个工具,也可以安装一下。输
2021-04-14 15:03:59 5308 3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人