Linux学习方法-框架学习法——Linux应用程序编程框架

配套视频学习链接:https://www.bilibili.com/video/BV1HE411w7by?p=4&vd_source=d488bc722b90657aaa06a1e8647eddfc

目录

Linux应用程序编程

Linux应用程序编程

Linux文件I/O(input/output)

Linux文件I/O(五种I/O模型)

Linux多进程

Linux多线程

网络通信(socket编程)

Linux应用编程框架


Linux应用程序编程

  • 应用编程即Linux系统编程
  • 基于Linux内核之上,基于'系统调用’或者库函数的编程。
  • Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用
  • 系统调用由操作系统核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态
  • '系统调用’在ARM系统中一般用'软中断’的方式来实现。
  • ARM处理器工作模式:

用户模式(USR):正常程序执行模式,不能直接切换到其他模式

系统模式(SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权

快中断模式(FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式

中断模式(IRQ):用于通用中断处理,IRQ异常响应时进入此模式

管理模式(SVC):操作系统保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发)

中止模式(ABT):用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处

未定义模式(UND):支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式

Linux应用程序编程

  • 包含丰富的内容(可参照'系统调用'清单)

文件I/O

多进程

多线程

网络SOCKET编程

时间函数、文件系统操作

用户管理、内存管理等

Linux文件I/O(input/output)

  • 一切皆文件(串口/LED等)
  • 文件I/O(inputoutput)实际就是对文件的读写操作

open()

read()

write()

ioctl()

close()

文件描述符(句柄)

fd=open(“目录文件”)

  • 标准I/O(带缓冲的IO)

可移植性更好 

Linux文件I/O(五种I/O模型)

阻塞

非阻塞

信号

多路复用

异步

Linux多进程

  • 多进程是多任务在Linux上的具体实现,多任务是操作系统的基本功能。
  • 进程的三种状态:就绪、阻塞、运行。

  • fork()分岔

  • 进程间通信

管道(匿名管道和命名管道)

信号

信号量

消息队列

共享内存

套接字

Linux多线程

  • 单个进程内可以运行多个线程,线程是操作系统时间片调度的最小单位
  • 每个线程可使用进程的全局变量
  • 线程生成函数:pthread create()
  • 线程同步(共用资源,合理分配资源的方式)

互斥锁

条件变量

读写锁

信号量

网络通信(socket编程)

网络通信是重点

很多操作系统的网络编程方式是一样的,都采用了socket方式

Linux应用编程框架

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2805574.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT在综合数据处理中的应用(续篇)

ChatGPT在综合数据处理中的应用(续篇) 小蜜蜂AI网站可以体验,扫码注册。 1.1 案例1: 用户连续活跃天数获取 ​ 用户连续活跃天天数有点类似于留存率指标,也能反映用户留存情况,实现逻辑稍微有些难度,我们…

第六章 本地方法接口

第六章 本地方法接口 文章目录 第六章 本地方法接口0. 前情提要1. 什么是本地方法2. 为什么要使用Native Method 0. 前情提要 图1 JVM架构 前几章讲完了类加载器子系统、运行时数据区的虚拟机栈和PC寄存器。这一节先穿插一节本地方法接口和本地方法库,再介绍本地方法…

第3.3章:StarRocks数据导入——Stream Load

一、概述 Stream Load是StarRocks最为核心的导入方式,用户通过发送HTTP请求将本地文件或数据流导入至StarRocks中,其本身不依赖其他组件。 Stream Load支持csv和json两种数据文件格式,适用于数据文件数量较少且单个文件的大小不超过10GB 的场…

RGB颜色如何转换为十六进制?16进制颜色代码怎么转为RGB颜色值?

我们在调整网站的色彩搭配,或修改图片的时候,偶尔需要用到RGB颜色值,或者16进制颜色代码。 如果我只知道16进制颜色代码想要知道RGB颜色值,那么16进制颜色代码怎么转为RGB颜色值?又或者我知道RGB颜色值想要知道16进制…

golang tun设备创建并监听

golang tun设备创建并监听 linux tun设备文件地址为/dev/net/tun.直接打开即可(关闭文件描述符创建的tun虚拟接口自动注销) fd,err:syscall.Open("/dev/net/tun",syscall.O_RDWR,0640)//关闭 syscall.Close(fd)初始化 配置ip地址启动虚拟网卡 ip addr add xxx.xx…

深入理解flinksql执行流程,calcite与catalog相关概念,扩展解析器实现语法的扩展

深入理解Flink Sql执行流程 1 Flink SQL 解析引擎1.1SQL解析器1.2Calcite处理流程1.2.1 SQL 解析阶段(SQL–>SqlNode)1.2.2 SqlNode 验证(SqlNode–>SqlNode)1.2.3 语义分析(SqlNode–>RelNode/RexNode&#…

[c++]实例观察返回值优化

1 返回值优化现象 RVO 如下代码,在 MakeObj() 中创建了一个局部对象 obj,并将 obj 返回。 Test() 函数调用了 MakeObj(),并将 MakeObj() 的返回值赋值给了 obj。 按我们的预期,MakeObj() 是值返回,在 main() 调用 Tes…

商业智能信息系统(BI):一文扫盲,全面掌握企业经营状况。

大家好,我是大美B端工场,本期继续分享商业智能信息系统的设计,欢迎大家关注,如有B端写系统界面的设计和前端需求,可以联络我们。 一、BI是什么 商业智能(Business Intelligence,简称BI&#xf…

c语言经典测试题5

1.题1 t0; while(printf("*")) { t; if (t<3) break; }关于上述代码描述正确的是&#xff1f; A: 其中循环控制表达式与0等价 B: 其中循环控制表达式与0等价 C: 其中循环控制表达式是不合法的 D: 以上说法都不对 我们来分析一下&#xff1a;printf的返回值…

笔记本Win 10系统查看电池健康状况

博主最近换了个笔记本电池&#xff0c;之前的电池容量明显变小了很多&#xff0c;而且出现了轻微鼓包的情况。所以用gpt问了一下怎么用系统的方法查看电池情况。 在Windows 10系统中&#xff0c;您可以通过以下步骤来查看笔记本电脑电池的健康状况&#xff1a; 打开命令提示符&…

ARM服务器部署Kafka集群

安装前必备的条件是: (1)安装jdk(提供环境); (2)安装zookeeper(注册kafka信息); 需要这方面信息的可以查看我之前写的文档; 一.下载安装包 Kafka官网下载地址 Apache Kafka 根据自己需要下载相应的版本 目前最新的版本是3.6.1。 二.解压安装包 服务器上传下载好的kafk…

VSCODE include错误 找不到 stdio.h

解决办法&#xff1a; Ctrl Shift P 打开命令面板&#xff0c; 键入 “Select Intellisense Configuration”&#xff08;下图是因为我在写文章之前已经用过这个命令&#xff0c;所以这个历史记录出现在了第一行&#xff09; 再选择“Use gcc.exe ”&#xff08;后面的Foun…

智慧公厕与智慧驿站:城市未来公共厕所的革命性升级

在当今社会&#xff0c;智慧公厕已经成为城市建设中一个备受关注的话题。智慧公厕究竟是什么&#xff1f;它代表了未来式的公共厕所&#xff0c;在使用方式、服务方式、管理方式、协作方式上均是变革式的升级。随着科技的进步和城市化的发展&#xff0c;智慧公厕的未来发展趋势…

悄悄话花费的时间(C语言)【二叉树各结点统计求和】

题目描述 给定一个二叉树&#xff0c;每个节点上站着一个人&#xff0c;节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时&#xff0c;根节点所在位置的人有一个悄悄话想要传递给其他人&#xff0c;求二叉树所有节点上的人都接收到悄悄话花费的时间。 输入描述 …

LeetCode刷题----day6(1)

转载自该文章https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 链表基础 什么是链表 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个…

挑战杯 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

基于大数据的智能家居销量数据分析

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

vue : 无法加载文件 C:\Program Files\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。

解决方法&#xff1a; 打开PowerShell&#xff0c;在命令框输入set-ExecutionPolicy RemoteSigned 在PowerShell中输入会出现如下图&#xff0c;输入y即可。

数据结构链表力扣例题AC(3)——代码以及思路记录

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 AC写法一 struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {//思…

Nginx跳转模块之rewrite

一.location与rewrite模块的区别 rewrite&#xff1a;对访问的域名或者域名内的URL路径地址重写 location&#xff1a;对访问的路径做访问控制或者代理转发 二.rewrite模块基本内容 1.功能 通过正则表达式的匹配来改变URI&#xff0c;可以同时存在一个或多个指令&#xff0c…