列一下Linux系统开发要掌握的知识。
欢迎关注我的微信公众号:fensnote

文章目录

  • Linux系统开发会用到什么?
    • C语言基础
    • shell脚本
    • 学会使用Makefile
  • 常规Linux系统编程知识都有什么?哪些常用?哪些不常用?
    • 常规Linux编程知识
      • 文件IO
      • 文件与目录操作
      • 标准IO库
      • 进程控制
      • 线程编程
      • 高级IO
      • 进程间通信
      • 数据库
      • 串口编程
      • 网络编程
    • 结束语

Linux系统开发会用到什么?

C语言基础

Linux系统内核是C语言编写的,所以,Linux系统开发可能会和很多系统API打交道,需要掌握C语言基础,C语言是Linux最基础的开发语言,当然也可以用C++。一般做与系统交互的模块时,用C语言多一些,做上层业务应用时,为了开发效率,会使用C++来开发,毕竟C++是面向对象的开发语言,适合大型项目的开发,方便模块化,代码复用率高。

shell脚本

shell脚本,也就是使用Linux系统下的一系列命令,有机组合在一起,而完成预期的功能。Linux设计思想是“小即是美”,这一思想是shell脚本编程的完美体现。每个命令只完成一种功能,不同的命令组合在一起,却可以实现复杂的功能。做Linux下开发,免不了要与脚本打交道(比如测试、分析数据等)。

学会使用Makefile

Makefile是Linux程序开发时必不可少的编译管理脚本,这个里面东西也很多,不过刚开始可以简单看看,够用就行,随着项目的越做越大,代码文件与目录越来越复杂,这时候的Makefile可能就会复杂一些,牵扯到不同目录的Makefile的相互调用或者协调。
比如嵌入式系统中,一般不止一个应用程序,可能会有多个程序,在整体编译时,会包括如下内容:

  1. 各个应用程序模块的编译(需要判断是否编译成功,出现编译失败的情况停下来,抛出错误信息)
  2. 应用程序打包(做成压缩包或者分区镜像)
  3. 默认配置文件打包
  4. uboot、内核、文件系统、应用程序整体打包成一个镜像文件,大小对应flash分区的大小(大小不足需要填充空数据,保证与分区对应)。
  5. 自动版本管理,在编译完成,打包完成后,可以通过脚本来自动根据时间生成版本号。

这些东西做起来其实挺复杂的,需要Makefile与shell脚本搭配完成。

常规Linux系统编程知识都有什么?哪些常用?哪些不常用?

常规Linux编程知识

文件IO

比较常用
Linux系统下,所有的资源都是以文件的形式访问的,设备被抽象为设备文件,放于/dev目录下。
基本的访问函数:

函数名 简介 一般怎么用
open 打开设备文件 访问设备文件,首先要先打开设备
close 关闭设备文件 文件访问结束后,需要调用该接口,如果不关闭,会造fb耗尽
read 读取数据 读取数据,可以是文本文件内容,也可以是摄像头数据等
write 写入数据 向设备写数据,比如串口通信时,可以用write发送数据
ioctl IO操作函数 该函数功能比较多,被称作杂物箱~,可以读、写数据,做驱动的同学应该很了解
fcntl 属性设置函数 对已经打开的设备,设置属性,比如可以设置串口读数据的阻塞和非阻塞属性
lseek 改变偏移量 一般用于对已打开的文件读写位置的偏移量修改
文件与目录操作

常用
系统编程少不了文件与目录的访问,比如你要读取某个目录下的所有文件名字,或者修改文件名、修改目录,移动文件等等。

函数名 简介 一般怎么用
stat、 fstat 、lstat 获取文件状态 可以获取到文件的创建、访问时间,文件大小等
access 检测文件属性 常用于判断文件是否存在
chmod 修改文件权限 一般涉及到文件访问权限修改时,会用到,比如增加可执行权限
mkdir 创建目录 一般在程序里判断到需要用到的目录不存在时,用此函数创建
rmdir 删除目录 需要删除目录时使用,一般很少用到
opendir 打开目录 在读取目录信息之前,需要先打开目录(类中与文件访问)
readdir 读取目录内容 在检索文件时,会用到,读取目录下文件列表
closedir 关闭目录 在读取完成后,记得关闭目录
sync 同步数据到磁盘 这个函数一般在修改文件,写入数据后调用,让系统把数据同步到磁盘
标准IO库

比较常用
所谓标准IO库,其实是C语言里的文件IO,另外这里面的IO与前面提到的“文件IO”在文件的读写上有个区别,标准IO是有缓存的,而Linux系统的文件IO函数是无缓存的。
主要是文件操作函数:

函数名 简介 一般怎么用
fopen 打开文件 放文件文件前先调用fopen获取文件句柄
fclose 关闭文件 文件访问结束后,记得关闭文件,否则造成内存泄露
fread 读取文件 读取文件数据
fseek 修改文件读写位置 用于修改文件读写的位置偏移量
进程控制

一般
如果你不使用多进程编程的话,这一项可能就用的不多,我的代码里用的也不是太多。
这个知识点主要是进程的创建、子进程管理、进程退出资源释放等等。

线程编程

比较常用
上了系统,一般跑的任务就会比较多,线程是比较常用的,一般可以分为两种,一种是长时间运行的任务,一种是执行完任务自行退出。现在C++11已经支持了线程,使用起来非常方便。之前没有C++11时,为了方便使用,都是对pthrea_簇函数进行了二次封装。

高级IO

常用
可能你会比较奇怪,为什么这么多“IO”相关的东西:文件IO、标准文件IO、高级IO!
是的,这里的IO比较多,前两个“IO”还有点相似,这个高级IO和前面两个有点不太一样。
高级IO里主要是讲的IO操作的方式:阻塞、非阻塞控制,最主要的是通过select和poll实现IO多路复用,这样可以实现程序的异步执行。现在用的比较多的Nginx,就是使用的epoll模型,实现的高并发。

进程间通信

非常常用
一般在linux系统下面,既然是系统,就不止一个应用程序在运行,那多个应用程序,就会需要数据交互,那么,就用到了进程间通信,进程间通信有许多开源的工具(比如DBUS),这里简单介绍一下系统里提供的通信方式:

名称 简介
管道 一般用于父子进程间通信,有名管道可以跨程序
消息队列 消息队列可以分类型,适用于数据量小的,简单通信
信号量 PV操作,用于同步,可以与共享内存搭配用,写完数据,告诉另一个线程可以读取了
共享内存 适用于大数据量的传输
socket socke不仅是网络通信的接口,也可以是本地进程间通信(UNIX socke),这种方式很常用
数据库

常用
如果是存储配置参数,我不太推荐用数据库,用json就挺好。数据一般用于存储比较规则的数据,这样方便数据的管理。在嵌入式系统,用的比较多的是sqlite数据库。

串口编程

比较常用
在Linux下,特别是做嵌入式系统,这个可能是少不了的,比较常用。其实串口编程也很简单,可能200行代码就可以把串口通信建立起来了。应用层的数据通信,就是使用write、和read函数操作,但是如果想做的比较好一些,就需要花点时间去做个软件框架,比如利用前面提到的select实现异步操作。

网络编程

超级常用
相信现在的嵌入式设备基本上都需要网络通信功能,所以,网络编程自然是非常常用的。特备是现在物联网的发展,万物互联。Linux下的网络编程,有一系列的API函数,挺多的,参数配置也比较多,刚开始会让人很头疼,不知道哪个参数设置个什么值合适。这个也不用担心,可以使用一些成熟的封装好的网络通信开源库。

结束语

以后有时间再介绍,欢迎大家关注。

微信公众号:

一文搞懂Linux系统开发相关推荐

  1. fseek linux 大文件_一文搞懂Linux系统开发

    文章目录 Linux系统开发会用到什么? C语言基础 shell脚本 慢慢学会使用Makefile 常规Linux系统编程知识都有什么?哪些常用?哪些不常用? 常规Linux编程知识 文件IO 文件与 ...

  2. 一文搞懂音视频开发技术点及职业发展方向

    音视频的知识纷繁复杂,自学非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验:本文就从音视频开发,开源框架,视频,业界大神,书籍推荐,就业方向分析,为广大开发者学习音视频技术提供便利. 首先我 ...

  3. 一文搞懂Linux下的文件的标准输入、标准输出、输出重定向问题

    Linux下一切皆文件,所谓的终端那个黑框也可以视为一个文件,在Linux驱动开发中各个设备也可以被认为是文件操作,所以文件的操作很重要.我们通常将键盘叫做标准输入设备.将显示器叫做标准输出设备,下面 ...

  4. 一文搞懂linux的proc文件

    目录 proc文件夹是干嘛用? proc下都有什么系统信息? /proc/bus /proc/buddyinfo /proc/cgroups /proc/cmdline /proc/consoles ...

  5. 一文搞懂Linux系统内核升级及下载当前内核源代码

    1. 下载当前内核源代码 为什么下载内核源代? 一是便于查看或学习linux内核代码的底层实现方法: 二是便于编写或调试Linux设备驱动程序,因为驱动程序的编译需要内核源代码. 怎么下载? 如果你是 ...

  6. 一文搞懂Linux rm命令 删除文件/文件夹

    文章目录 一 rm命令简介 二 rm命令通用格式 三 使用示例 删除文件/文件夹 3.1 rm删除文件 3.2 rm删除文件夹 四 总结 一 rm命令简介 rm命令是Linux系统的一个命令.rm命令 ...

  7. 一文搞懂 | Linux 驱动的来龙去脉

    驱动相关的学习资料网上很多,但大部分都是碎片化的记录,很少有系统化的总结整理.本文旨在系统化的讲清楚 Linux 驱动的来龙去脉.先从总线,设备,驱动介绍内核对于驱动的模型设计:然后引入设备树的概念, ...

  8. 一文搞懂Linux内核怎么提升UDP收包的效率

    现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议栈,他们的武器貌似只有DPDK. 但是,即便Linux内核协议栈收包 ...

  9. 一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。

    前言 秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景.欢迎大家参与我们的开源项目,提交PR,提高竞争力.早日上岸,升职加薪. 知识点详解 秒杀系统架构图 秒杀流程图 秒杀系统设计 这篇 ...

最新文章

  1. 生成假人脸、假新闻...AI虚拟世界正形成
  2. Windows Azure 新上线网络相关服务
  3. Mysql学习(三)之数据库管理工具Navicat
  4. PingingLab传世经典系列《CCNA完全配置宝典》-5.8 静态NAT
  5. KubeMeet 深圳站完整议题出炉
  6. jQuery 判断鼠标键
  7. manacher(马拉车)算法详解
  8. 测试管理中的一个问题—功能点覆盖还是功能测试点覆盖
  9. 消息队列 (1) mac安装RabbitMQ
  10. java List的简单运用
  11. 双二极管(BAT54S)在电路中起什么作用? 钳位和保护
  12. CCS软件的Graph功能
  13. 超市管理系统连接服务器失败,超市管理系统应用解决超市管理难题
  14. Python每日一练(7)-图片转字符画
  15. echarts双柱_R+Echarts画双坐标轴折柱混合图
  16. Excel 冻结窗口
  17. 工具系列 | 使用Lodop进行WEB打印程序开发
  18. supermap新建数据源_supermap iDesktop 处理数据集及生成场景缓存
  19. mysql中的锁(表锁,行锁)
  20. NOAA(美国国家海洋和大气管理局)逐月数据下载文件之官方说明文档(GSOM)

热门文章

  1. js中构造函数的创建
  2. 婚前男方父母出资购车登记在女方名下 离婚时如何分割
  3. 基础知识 - 差分隐私
  4. 4.[JAVA视频教程]JavaEE初中级工程师 视频目录
  5. 手机号、密码正则校验
  6. 让你的办公更简单的这些电脑软件分享
  7. 类和对象实战 —— 日期类的实现
  8. WPF 自定义TabControl控件样式(转)
  9. 风变编程——古灵阁金币兑换
  10. Kali渗透测试之DVWA系列2——Brute Force(暴力破解)