linuxC
1 、系统调用和库函数1-1 、库函数由两类函数组成
1、不需要调用系统调用,不需要切换到内核空间即可完成函数的全部功能,并且将结果反馈给应用程序,如strcpy、bzero等字符串操作函数。
2、需要调用系统调用,需要切换到内核空间,这类函数通过封装的系统调用去实现相应的功能,如printf、fread等
1-2、系统调用与库函数的关系
并不是所有系统调用都被封装成为库函数,
系统提供的很多功能必须通过系统调用才能实现。
也就是大部分的库函数都是由系统调用封装而来。
只不过库函数拥有缓冲区,
减少了系统调用的次数
1-2-1、系统调用特点
系统调用是需要时间的,
频繁的系统调用会降低程序的运行效率。
当运行内核代码时,
cpu工作在内核态,
在系统调用发生前需要保存用户态的栈和内存环境,
然后转入内核态工作。
结束调用后又返回用户态。
1-2-2、库函数的好处
库函数访问文件的时候需要根据需要设置不同类型的缓存区,
从而减少了直接调用io系统调用
的次数,
提高了访问的效率。
如:应用程序调用printf时,如下图
1、进程当一个系统启动后,会先 ...
事件机制
1、同步阻塞(bio)、同步非阻塞(nio)、select、poll、epoll、信号驱动式io、异步io1.1 同步阻塞1、阻塞式IO,客户端发送请求,服务端接收请求,服务端处理请求,服务端返回结果,客户端接收结果。
客户端会先去访问文件描述符状态,如果文件描述符就绪,则读取数据;如果文件描述符未就绪,则会阻塞等待。数据经过网卡,dma拷贝到内核环形缓冲区后,触发一个中断,将文件描述符改到就绪态,将数据拷贝到用户空间,然后返回。
1.2 同步非阻塞相比与阻塞式IO,非阻塞式IO在等待数据就绪时不会阻塞。直接在发送或者读的时候返回负1,然后通过轮询的方式来检查数据是否就绪。注意文件描述符是需要同步内核的本质上,也还是会阻塞,读的时候就是阻塞的,只不过是在等待的过程中没有阻塞
1.3 selectselect本身是阻塞的,它通过一个数组,将一组文件描述符加入到这个数组中,然后发给内核,内核去同步有没有写或者读事件,如果有,就将对应数据的描述符位置为1,然后返回。这样就知道那个文件描述符就绪了。select的缺点是每次都要将所有的文件描述符都发给内核,然后内核再去同步。
说明select这 ...
无题
掌握驱动移植开发知识掌握qt,音视频开发
音视频原理入门
入门基础视频视频帧率视频帧,帧率,帧率一般电视在25帧/秒,电影在24帧/秒,1080P 60帧/秒,720P 30帧/秒。过高无意义。
色彩空间常见的两种色彩空间:RGB 和 YUV。RGB是彩色空间,RGB三通道,R为红色,G为绿色,B为蓝色。早期的电视都是黑白的,YUV只有Y亮度值,后来加入两种色度UV,也叫YCbCr。色度定义了颜色的两个方面:色度,饱和度。Cr:反应的是输入信号红色部分与RGB信号之间的差异。Cb:反应的是输入信号蓝色部分与RGB信号之间的差异。
总结:Y:亮度,也代表一定程度的绿色通道量。U:与蓝色部分之间的差异。V:与红色部分之间的差异。
人眼对亮度的敏感度更高,对色度敏感度较低。
RGB和YUV进行线性量化转换。
音频音频数据的承载方式最常见的就是脉冲编码调制,也就是pcm。pcm的采集可以分为以下模拟信号->采样->量化->编码->数字信号
采样率根据采样的奈奎斯特定理,采样率必须大于等于2倍的信号频率。人耳20Hz到20KHz之间可以听清。
采样率,就是采样的频率。
采样位数这个直接涉及 ...
计算机是怎么跑起来的
这个是计算机怎么跑起来的读书笔记。本书由日本作者失泽久雄所写
计算机三大原则计算机三大原则:输入、处理(运算)、输出任何一个计算机都是这样运行的,同理程序也是如此。
输入:输入数据处理:运算输出:输出数据
程序:本质是指令+数据这里的十六进制,全是数据。如果是可执行文件,开头前几个字节,基本就是指令。所有的十六进制。要么是指令,要么是数据,不会有其他的。
编码编码:将数据转换成计算机可识别的二进制数据。常见的中文编码,颜色编码。本质是让计算机去识别。
计算机只认识数字(废话)所有的程序都是一堆数字,连接这一切的就是编码
总结书上的例子。微软为新一代互联网提出了.NET技术,作为.NET核心的XMLweb服务使用通用的soap、XML,使得互联网计算机之间协同工作。
这段话初读确实如书中所说的一样,不知道说的是什么。但是按照计算机的三大原则,就可以说,使用soap规范了指令或者数据,XML规范了数据或者指令。至于为什么soap复杂什么的,那就归为是要计算机去处理的方式。毕竟计算机只能认识到简答的数字。
试着制造一台计算机吧本次作者留了三个问题
初级问题1 、 CPU 是什么的缩写?
中级 ...
openssl和unzip和zip移植
openssl 移植编译脚本:
1234567891011121314#!/bin/bashmake cleanmkdir outputexport CC=/home/wangyp/project/dtcwyp/opt/arm-fullhanv3-linux-uclibcgnueabi-b6/bin/arm-fullhanv3-linux-uclibcgnueabi-gcc./Configure \ no-zlib \ --shared \ --prefix=$(pwd)/output openssl-1.0.2h \ os/compiler:arm-fullhanv3-linux-uclibcgnueabi-b6 \ -DOPENSSL_THREADS \ -Wno-psabi -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 -fno-aggressive-loop-optimizationsmakem ...
x264和x265 移植
x264 移植编译脚本
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#!/bin/bashsudo chmod 777 ./* -Rfpath_cur=$(pwd)# rm -rf x264build_x264() { cd x264 sudo make clean local path="/home/tuling/.FuHan-arm-linux/opt/arm-fullhanv3-linux-uclibcgnueabi-b6/bin" build_x264=${path_cur}/buildx264 sudo rm -rf $build_x264 sudo mkdir -p $build_x264 ./configure \ --prefix=$build_x264 \ --host=arm-fullhanv3-linux-ucl ...
富瀚mmc移植
mmc 移植linux自带的无法对出错的mmc进行处理,需要自己移植mmc工具,参考mmc-utils
编译脚本:123456789101112131415161718192021#!/bin/bashCC=/home/tuling/.FuHan-arm-linux/opt/arm-fullhanv3-linux-uclibcgnueabi-b6/bin/arm-fullhanv3-linux-uclibcgnueabi-gccCROSS_COMPILE=/home/tuling/.FuHan-arm-linux/opt/arm-fullhanv3-linux-uclibcgnueabi-b6/bin/arm-fullhanv3-linux-uclibcgnueabiARCH=armexport CC=/home/tuling/.FuHan-arm-linux/opt/arm-fullhanv3-linux-uclibcgnueabi-b6/bin/arm-fullhanv3-linux-uclibcgnueabi-gccexport CROSS_COMPILE=/home/tulin ...
富瀚ffmpeg移植
编译脚本:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138rm -rf ffmpeg# sudo chown $USER:$USER /outputoutput=${PWD}/outputrm -rf outputmkdir -p ./outputbuild_ffmpeg() {cd ffmpeg# make distcleanexport PATH=/home/tuling/.FuHan-arm-l ...
map
mapstd::map<key_type, value_type> myMap;
注意事项
map的key是唯一的,不能重复。2、注意访问如果不存在会自动创建一个元素。所以尽量是用迭代器访问。(避免map[key]方式)