Linux系统开发总览

Qt实现的TCP端口转发工具 使用Qt实现了一个Tcp端口转发的工具,实现功能具体如下: 本地启动一个服务,接收远端客户端的连接。同时也会连接另一个服务器,会将 接收到客户端的数据,转发到连接的服务器上面。 通过该工具的编码,也正好练习了一下Qt的socket编程(服务器/客户端),是个 不错的例子,欢迎大家来Emil索取源码,共同学习! Emil:wuquan-1230@163.com 立即下载

先列一下Linux系统开发要掌握的知识,后续有时间再一一来讲。
欢迎关注我的微信公众号:fensnote

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发送数据
ioctlIO操作函数该函数功能比较多,被称作杂物箱~,可以读、写数据,做驱动的同学应该很了解
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操作,用于同步,可以与共享内存搭配用,写完数据,告诉另一个线程可以读取了
共享内存适用于大数据量的传输
socketsocke不仅是网络通信的接口,也可以是本地进程间通信(UNIX socke),这种方式很常用
数据库

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

串口编程

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

网络编程

超级常用
相信现在的嵌入式设备基本上都需要网络通信功能,所以,网络编程自然是非常常用的。特备是现在物联网的发展,万物互联。Linux下的网络编程,有一系列的API函数,挺多的,参数配置也比较多,刚开始会让人很头疼,不知道哪个参数设置个什么值合适(我们都是慢慢试错试出来的)。这个也不用担心,我后面会给大家分享出来我用C++封装好的网络通信库,包括TCP、UPD、UDP组播、域套接字(本地)等的封装。

结束语

后续准备按照今天列出的这几项内容,在后面的文章一一介绍,欢迎大家关注跟进。

微信公众号:
在这里插入图片描述

pyautogui库详细教程,逐行注释(附项目实战:基于图像识别实现崩坏星穹铁道自动化测试) 本文包含了pyautogui的使用方法与常见问题指南,随文附带对游戏实现的自动化项目源码与说明文档 阅读详情

相关推荐

VC Spyglass:Lint实战指南之TCL脚本自动化解析

本文详细介绍了如何利用TCL脚本实现VC Spyglass Lint检查的自动化流程。通过实战指南,从基础脚本编写到高级参数化技巧,帮助数字IC设计工程师摆脱手动操作,提升验证效率,并实现与CI/CD流程的集成。

h3i4j的博客 796

Linux 开发

core 文件是大多数 UNIX 系统实现的一种特性, 当进程崩溃时, 操作系统会将进程当前的内存映像和一部分相关的调试信息写入 core 文件, 方便人们后面对问题进行定位。/proc/sys/kernel/core_uses_pid 可以控制产生的 core 文件的文件名中是否添加 pid 作为扩展, 如果添加则文件内容为 1, 否则为 0。如果添加了 pid, 生成的 core 文件一般为 core.xxx(xxx 为 core dump 的进程号)。默认为 0, 即不添加进程 pid.

云满笔记 3149

vasp-自旋轨道耦合(SOC)计算步骤

在VASP中执行自旋轨道耦合(SOC)计算,具体的计算步骤如下: 结构优化获取CONTCAR文件 自洽计算(collinear normal VASP calculations)获取IBZKPT,CHGCAR和WAVECAR文件。 SCF+SOC计算,在此步骤中,将步骤2中的IBZKPT复制为KPOINTS,以便两个步骤具有相同的k网格,因此可以读取步骤2中的CHGCAR和WAVECAR文件。 能带结构计算,在此步骤中,将KPOINTS改为高对称点,读取步骤3中的CHGCAR和WAVECAR文件。

懒散的鱼与消失的猫 3万+

在Linux系统进行开发常识

linux系统基本常识

Jadenlee的博客 1034

【Qualcomm高通音频】音效调试_录音文件播放有杂音,如何定位原因?

一、录音播放数据处理过程介绍 (1)TX方向 麦克风(硅麦克风或者主机体麦克风)采集模拟音频信号,经过内部CODEC芯片中的adc转换为数字信号,在经过高通音频DSP处理音效后编码为wav/aac/amr/mp3等格式文件。 (2)RX方向 音频文件经过解码、重采样还原为pcm数据,经过DSP处理音效后送到内部CODEC,然后经过DAC转换为模拟信号,送到喇叭。 二、分析步骤 1...

crow_ch的博客 5973

Shopee 虾皮API接口:商品详情采集的实践

随着电商行业的蓬勃发展,数据采集和分析在商业决策中扮演着越来越重要的角色。Shopee作为东南亚领先的电商平台,拥有大量的商品数据。通过Shopee的API接口,我们可以方便地获取商品详情,为数据分析和市场研究提供有力支持。本文将介绍如何使用Shopee API接口采集商品详情,并分享一些实践技巧。提供了丰富的数据接口,包括商品详情、店铺信息、订单数据等。通过API接口,开发者可以轻松地获取Shopee平台上的数据,进行进一步的处理和分析。Shopee API接口:商品详情采集的实践与技巧。

An4480的博客 1888

Linux 上的编程

在 Linux 下,大多编程语言都会提供一套适合命令行的、简单便捷的工具链。善于运用这些工具,能够极大地提升你的开发效率,支持你完成自己的项目。外部包引用和依赖管理是程序开发中必不可少的部分。如果官方有成熟的方案,跟随他们是明智的选择。否则则需根据实际情况,按需选用。

白话机器学习 532

手把手教你为FPGA项目集成HyperRAM IP核:从AXI接口封装到上板调试全流程

本文详细介绍了如何为FPGA项目集成HyperRAM IP核,涵盖从AXI接口封装到上板调试的全流程。通过对比DDR3L、PSRAM和HyperRAM的性能指标,突出HyperRAM在低功耗和小封装尺寸方面的优势,并提供硬件连接、AXI4-Lite接口设计、状态机优化及调试技巧等实用内容,帮助开发者高效完成FPGA项目中的内存扩展。

weixin_32103009的博客 286

嵌入式Linux系统开发笔记(七)

嵌入式Linux U-Boot基础

SudekiMing的博客 6439

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

添加新设备(PLC)->设备和网络管理->点击PLC->看到硬件目录选择通信板->点到点->CB1241(RS485)->看到6ES7241-1CH30-1XB0选择添加,如图。指向Modbus保持寄存器数据块的指针 我这里指向了自定义的DB块数据中一个INT数组。在通信->通信处理模块->MODBUS(选择不带RTU的通信指令块)注意:接线时,TRA接485调试模块的B- TRB接调试模块的A+组态后的硬件标识符 270 对应自己组态后自动生成的。1:事务完成,且无任何错误。波特率对应自己使用的。

swmyaopeng的博客 2万+

CANoe/CANalyzer新手必看:从零配置到报文分析的完整流程(附B站官方教程实操)

本文为CANoe/CANalyzer新手提供从零配置到报文分析的完整流程指南,涵盖硬件连接、工程配置、报文捕获及信号级分析等关键步骤。通过详细的实操案例和B站官方教程,帮助工程师快速掌握汽车电子总线分析工具的核心应用,提升诊断效率与通信系统理解。

y7z8a的博客 774

一文搞懂Linux系统开发

先列一下Linux系统开发要掌握的知识,后续的文章中,会一 一讲解。 欢迎关注我的微信公众号:fensnote 文章目录Linux系统开发会用到什么?C语言基础shell脚本慢慢学会使用Makefile常规Linux系统编程知识都有什么?哪些常用?哪些不常用?常规Linux编程知识文件IO文件与目录操作标准IO库进程控制高级IO进程间通信数据库串口编程网络编程结束语 Linux系统开发会用到什...

风声的专栏 5061

华为OD机试真题2026双机位C卷 Python&JS 实现【明日之星选举】

给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

MISAYAONE的博客 319

OK6410A 开发板 (八) 78 linux-5.11 OK6410A 文件系统启动总览

文件系统初始化分为两个阶段,时间点如下 1. start_kernel -> kernel_init // .s 到 start_kernel 没有 文件系统 什么事 2. kernel_init -> ... 且我们讨论的时候,以 无 init_xxx 技术的启动流程为准 一二阶段概览 第一阶段 start_kernel vfs_caches_init_early vfs_caches_init mnt_init init_rootfs //注册 rootfs..

u011011827的博客 201

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

本地Linux环境连接管理开发者空间 - 云开发环境

通过本案例的学习,开发者能够掌握在Linux系统创建云开发环境,选择更适合自己的方式进行程序开发和调试。

华为云官方博客 949

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

linux SD卡驱动

Linux SD卡驱动开发(一) —— SD 相关基础概念 https://blog.youkuaiyun.com/zqixiao_09/article/details/51039378 Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇 https://blog.youkuaiyun.com/zqixiao_09/article/details/5103...

li5830的博客 1332

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

8.input子系统基础之按键

《5.linux驱动开发-第5部分-5.8.input子系统基础之按键》 第一部分、章节目录 5.8.1.什么是input子系统 5.8.2.input设备应用层编程实践1 5.8.3.input设备应用层编程实践2 5.8.4.input子系统架构总览1 5.8.5.input子系统架构总览2 5.8.6.输入核心层源码分析1 5.8.7.输入核心层源码分析2 5.8.8.输入事件驱动层源码分析...

阿路 372

Linux中常用的查看系统信息的命令

Linux中常用的查看系统信息的命令

ZhangJunhao_net的博客 1188

嵌入式linux开发 (三) B盘资料总览

不感兴趣

u011011827的博客 207

Linux引导过程总览

目录一、引导过程1.引导过程总览2.systemd进程3.target单元二、服务配置1.修复MBR扇区故障修复MBR扇区故障修复GRUB 引导故障GRUB配置文件2.忘记root密码3.系统服务控制4.linux系统运行级别5.优化启动过程ntsysv工具chkconfig工具5.优化启动过程ntsysv工具chkconfig工具 一、引导过程 1.引导过程总览 开机自检(BIOS) MBR引导 GRUB菜单 加载内核(Kernel)与内存文件系统 加载硬件驱动与初始化进程

肥猫警长的博客 1787

Linux操作系统笔记总览

Linux操作系统笔记总览 用户管理与权限设定 文件的权限与其更改 一些常用的Linux基本知识 系统结构与寻址方式 vim管理 输入输出管理 进程管理 用户登录审计,ssh服务与一些系统控制命令 文件传输、归档与压缩 磁盘管理与分区划分 管理系统存储之磁盘加密、RAID与用户配额 逻辑卷管理LVM vsftpd服务 软件安装 网络管理1 网络管理2拓展 DHCP服务器的搭建 延时任务和定时任务...

kuanyew的博客 479

Linux系统包管理与安装方式总览

apt、dpkg、yum、rpm、snap、pip等安装方式总览

qq_54707941的博客 1022

Linux——操作系统启动总览

针对linux启动的bootloader和内核进行分析

知识,既贵,又便宜。 3607

三大操作系统比较,为什么开发要用Linux系统?(推荐)

 windows, macOS,linux是当今主流三大操作系统,普通用户一般是选择windows或macOS, linux主要是占据服务器领域市场。这三个操作系统给人的感觉是:windows经济适用,档次较低; macOS高端大气上档次; Linux是极客专用,一个黑乎乎的窗口,各种花花绿绿的指令在闪烁,对着键盘噼里啪啦一通乱敲,就能窃取各种机密...         普通用户对于操作系统的选...

Juunnry的博客 7万+

嵌入式linux系统开发教程

在学习嵌入式开发的过程中,尤其是开始入门时,包括各种各样的教程,都是在讲学习linux,很少讲如何利用linux来开发属于自己的嵌入式项目,也就是没有一个全局的概念,简单理解,大概流程如下: 一、建立开发环境 操作系统当然是LInux,或者在win系统下安装虚拟机,通过网络下载相应的GCC交叉编译器进行安装,或者安装产品厂家提供的交叉编译器。 这一步,就相当于在win系统下,要安装一个IDE开发环境,如MDK,IAR等。 二、配置开发主机 主要是配置minicom,也就是串口助手,minicom

manongxianfeng的博客 1万+

深入解读Linux内存管理系列(总览)

日期 内核版本 CPU架构 作者 2019.04.06 Linux-4.4 PowerPC LoneHugo 系列文章 文章 概要 深入解读Linux内存管理系列(1)——系统启动阶段的操作 系统启动阶段需要完成的工作以及内存状态 深入解读Linux内存管理系列(2)——内存节点的添加 识别并添加物理内存,初始...

Hugo的博客 2951
下一篇: 《共享内存》Linux进程间通信入门
fensnote
博客等级 码龄7年 11粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值