文章目录
Linux开发会用到哪些?
C语言基础
渐渐学会使用Makefile
常规Linux系统编程知识都有哪些?什么常用?什么不常用?
常规Linux编程知识
文件IO
文件与目录操作
标准IO库
进程控制
线程编程
中级IO
进程间通讯
数据库
并口编程
网路编程
结束语
Linux系统开发会用到哪些?
C语言基础
Linux系统内核是C语言编撰的,所以,Linux系统开发可能会和好多系统API打交道,须要把握C语言基础,C语言是Linux最基础的开发语言,其实也可以用C++。通常做与系统交互的模块时,用C语言多一些,做下层业务应用时,为了开发效率,会使用C++来开发,虽然C++是面向对象的开发语言,适宜小型项目的开发,便捷模块化linux系统大小,代码复用率高。
shell
shell脚本,也就是使用Linux系统下的一系列,有机组合在一起,而完成预期的功能。Linux设计思想是“小即是美”,这一思想是shell脚本编程的完美彰显。每位只完成一种功能,不同的组合在一起,却可以实现复杂的功能。做Linux下开发,免不了要与脚本打交道(例如测试、分析数据等)。
渐渐学会使用Makefile
Makefile是Linux程序开发时必不可少的编译管理脚本,这个上面东西也好多,不过刚开始可以简单瞧瞧,够用就行,随着项目的越做越大,代码文件与目录越来越复杂,这时侯的Makefile可能还会复杂一些,牵涉到不同目录的Makefile的互相调用或则协调。
例如嵌入式系统中,通常不止一个应用程序,可能会有多个程序,在整体编译时,会包括如下内容:
各个应用程序模块的编译(须要判定是否编译成功,出现编译失败的情况停出来,抛出错误信息)
应用程序打包(弄成压缩包或则分区镜像)
默认配置文件打包
uboot、内核、文件系统、应用程序整体打包成一个镜像文件,大小对应flash分区的大小(大小不足须要填充空数据,保证与分区对应)。
手动版本管理,在编译完成,打包完成后,可以通过脚本来手动按照时间生成版本号。
这种东西做上去似乎挺复杂的,须要Makefile与shell脚本搭配完成。
常规Linux系统编程知识都有哪些?什么常用?什么不常用?
常规Linux编程知识
文件IO
比较常用
Linux系统下,所有的资源都是以文件的方式访问的,设备被具象为设备文件,放于/dev目录下。
基本的访问函数:
函数名简介通常如何用
open打开设备文件访问设备文件,首先要先打开设备
close关掉设备文件文件访问结束后,须要调用该插口,倘若不关掉,会造fb用尽
read读取数据读取数据,可以是文本文件内容,也可以是摄像头数据等
write写入数据向设备写数据,例如并口通讯时,可以用write发送数据
ioctlIO操作函数该函数功能比较多,被叫做杂物箱~,可以读、写数据,做驱动的朋友应当很了解
fcntl属性设置函数对早已打开的设备,设置属性linux服务器系统,例如可以设置并口读数据的阻塞和非阻塞属性
lseek改变偏斜量通常用于对已打开的文件读写位置的偏斜量更改
文件与目录操作
常用
系统编程少不了文件与目录的访问,例如你要读取某个目录下的所有文件名子,或则更改文件名、修改目录,联通文件等等。
函数名简介通常如何用
stat、fstat、lstat获取文件状态可以获取到文件的创建、访问时间,文件大小等
access检查文件属性常用于判定文件是否存在
chmod更改文件权限通常涉及到文件访问权限更改时,会用到,例如降低可执行权限
mkdir创建目录通常在程序里判定到须要用到的目录不存在时,用此函数创建
rmdir删掉目录须要删掉目录时使用,通常极少用到
opendir打开目录在读取目录信息之前,须要先打开目录(类中与文件访问)
readdir读取目录内容在检索文件时,会用到linux系统大小,读取目录下文件列表
closedir关掉目录在读取完成后,记得关掉目录
sync同步数据到c盘这个函数通常在更改文件,写入数据后调用,让系统把数据同步到c盘
标准IO库
比较常用
所谓标准IO库,当然是C语言里的文件IO,另外这儿面的IO与上面提及的“文件IO”在文件的读写上有个区别,标准IO是有缓存的,而Linux系统的文件IO函数是无缓存的。
主要是文件操作函数:
函数名简介通常如何用
fopen打开文件放文件文件前先调用fopen获取文件句柄
fclose关掉文件文件访问结束后,记得关掉文件,否则致使显存泄漏
fread读取文件读取文件数据
fseek更改文件读写位置用于更改文件读写的位置偏斜量
进程控制
通常
假如你不使用多进程编程的话,这一项可能就用的不多,我的代码里用的也不是太多。
这个知识点主要是进程的创建、子进程管理、进程退出资源释放等等。
线程编程
比较常用
上了系统,通常跑的任务都会比较多,线程是比较常用的,通常可以分为两种,一种是长时间运行的任务,一种是执行完任务自行退出。现今C++11早已支持了线程,使用上去十分便捷。之前没有C++11时linux shell,为了便捷使用,都是对pthrea_簇函数进行了二次封装。
中级IO
常用
可能你会比较奇怪,为何如此多“IO”相关的东西:文件IO、标准文件IO、高级IO!
是的,这儿的IO比较多,前两个“IO”还有点相像,这个中级IO和上面两个有点不太一样。
中级IO里主要是讲的IO操作的方法:阻塞、非阻塞控制,最主要的是通过select和poll实现IO多路复用,这样可以实现程序的异步执行。现今用的比较多的Nginx,就是使用的epoll模型,实现的高并发。
进程间通讯
十分常用
通常在linux系统下边,既然是系统,就不止一个应用程序在运行,那多个应用程序,都会须要数据交互,这么,就用到了进程间通讯,进程间通讯有许多开源的工具(例如DBUS),这儿简单介绍一下系统里提供的通讯方法:
名称简介
管线通常用于母子进程间通讯,有名管线可以跨程序
消息队列消息队列可以分类型,适用于数据量小的,简单通讯
讯号量PV操作,用于同步,可以与共享显存搭配用,写完数据,告诉另一个线程可以读取了
共享显存适用于大数据量的传输
socketsocke除了是网路通讯的插口,也可以是本地进程间通讯(UNIXsocke),这些方法很常用
数据库
常用
假如是储存配置参数,我不太推荐用数据库,用json就很好。数据通常用于储存比较规则的数据,这样便捷数据的管理。在嵌入式系统,用的比较多的是sqlite数据库。
并口编程
比较常用
在Linux下,非常是做嵌入式系统,这个可能是少不了的,比较常用。虽然并口编程也很简单,可能200行代码就可以把并口通讯构建上去了。应用层的数据通讯,就是使用write、和read函数操作,而且假如想做的比较好一些,就须要花点时间去做个软件框架,例如借助上面提及的select实现异步操作(前面文章会介绍实现方法以及并口的封装)。
网路编程
超级常用
相信现今的嵌入式设备基本上都须要网路通讯功能,所以,网路编程自然是十分常用的。特备是现今物联网的发展,万物互联。Linux下的网路编程,有一系列的API函数,挺多的,参数配置也比较多,刚开始会让人很难受,不晓得那个参数设置个哪些值合适(我们都是渐渐试错试下来的)。这个也不用担忧,我旁边会给你们分享下来我用C++封装好的网路通讯库,包括TCP、UPD、UDP组播、域套接字(本地)等的封装。
结束语
————————————————
版权申明:本文为CSDN博主「fensnote」的原创文章,遵守CC4.0BY-SA版权合同,转载请附上原文出处链接及本申明。
原文链接:
本文原创地址://lrxjmw.cn/cglbczswjwjy.html编辑:刘遄,审核员:暂无