嵌入式全栈开发学习笔记---Linux系统编程(概述)

news2024/11/15 4:35:08

目录

入门级问题

为什么要学习Linux系统?

为什么Linux系统被嵌入式设备广泛应用?

系统调用

应用层是什么?

系统调用和库函数有什么区别?

为什么在应用层不能直接调用内核中的函数?

为什么有了系统调用就安全了?

什么是API应用编程接口?


目前为止我们已经学习了linux系统的终端上的一些操作命令、vim编辑器上的一些操作命令、C语言和数据结构,还做一个“停车管理系统”的项目。

从今天开始学习Linux系统编程!

入门级问题

为什么要学习Linux系统?

因为在嵌入式设备中用的大多都是Linux系统,而且在现实生活中Linux系统应用的概率可能比windows系统要大,比如安卓系统底层用的就是Linux系统,很多智能家居用的也都是Linux系统,一些路由器也是Linux系统,电视机底层用的也是Linux系统等等,凡是能被手机远程控制的产品,它们的底层一般都是Linux系统。

为什么Linux系统被嵌入式设备广泛应用?

因为Linux系统开源免费,而且功能强大。

说明:本专栏是嵌入式学习栏目,因此数据结构这部分的学习环境我们最好还是在虚拟机(或者一些云服务器)上的Linux终端学习,一切为了方便适应以后的工作环境!

现在开始进入正题......

系统调用

操作系统一般是由两个部分组成:一个操作系统的内核(内核空间),还有一个是应用层(用户空间);

内核(操作系统的核心)又可以分为好几个部分,驱动(操作底层硬件)只是其中一部分。内核有五大功能:内存管理、网络管理、文件管理、系统管理、进程调度。这些核心功能是应用层不能使用的。

应用层是什么?

应用层也可以分为好几个部分,其中最上层就是我们之前经常敲的一些命令:cd, cp, ls等等,这些命令都属于应用层。

比如ls这个命令实现的是显示当前文件夹下的一个文件,那它是怎么实现的呢?

它其实也通过代码实现的,即调用了某些函数来完成这样的一个功能,而这个函数我们就这个把它称为系统调用,因此这个系统调用通俗来讲就是函数。但是这个函数跟我们C语言中的库函数不一样。

目前我们接触了两种函数,一种是库函数(比如printf, strcp),一种是系统调用(open, socket, fork)。

系统调用和库函数有什么区别?

系统调用函数只属于Linux操作系统,只能在Linux操作系统中使用,而库函数,无论是Windows还是Linux或者其他操作系统,只要系统中移植了C库就一定可以使用,所以C语言是跨平台的。

在应用层如果我们想要打印数据我们使用的是printf这个函数,在内核中如果想要打印数据的话也有相应的函数。应用层有一套函数,在内核中也有一套自己的函数。

为什么在应用层不能直接调用内核中的函数?

主要是为了安全起见,因为用户操作有误,系统就“死掉”了。因此,为了安全起见,应用层和内核之间隔了一层系统调用。

为什么有了系统调用就安全了?

因为系统调用中做了一些判断,如果发现所传参数是合法的,就让用户调用内核中的函数。

系统调用衔接了应用层和内核,像ls cd cp这些命令是系统调用之上的,也就是说ls这个命令是通过系统调用来实现的。

什么是API应用编程接口?

API(application program interface)其实也是系统调用这些函数,两个概念差别不大,有时候说系统调用,有时候可以说API。

系统调用并不是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内核提交请求,以获取内核服务的接口。在实际使用中程序员调用的通常是用户编程接口—API。

系统命令相对API更高了一层,它实际上是一个可执行程序,它的内部引用了用户编程接口(API)来实现相应的功能。

下节开始学习Linux文件编程!

本篇就到这里,下篇继续!欢迎点击下方订阅本专栏↓↓↓

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

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

相关文章

Linux系统安装MySQL8.0

1.查看Linux发行版 2.安装前准备 2.1.检查是否安装 rpm -qa | grep mysql 2.2.如已安装mysql,则删除 rpm -e --nodeps 包名 2.3.再次检查安装包是否全部删除 rpm -qa | grep mysql 2.4.搜索mysql文件夹 find / -name mysql 2>/dev/null 2.5.若有mysql文件夹&a…

Golang | Leetcode Golang题解之第388题文件的最长绝对路径

题目&#xff1a; 题解&#xff1a; func lengthLongestPath(input string) (ans int) {n : len(input)level : make([]int, n1)for i : 0; i < n; {// 检测当前文件的深度depth : 1for ; i < n && input[i] \t; i {depth}// 统计当前文件名的长度length, isFi…

Cookie对象的缺陷与应对策略

Cookie对象的缺陷与应对策略 1. 安全性问题&#xff1a;Cookie是明文的2. 存储限制&#xff1a;浏览器对Cookie数量和大小有限制3. 性能影响&#xff1a;Cookie携带过多增加网络流量4. 数据类型限制&#xff1a;Cookie的value值只能是字符串 &#x1f496;The Begin&#x1f4…

82.给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。实现返回已排序的链表

删除排序链表中的重复元素 II 一、题目描述 82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5] 示例 2: 输入:hea…

华为云征文|部署电影收藏管理器 Radarr

华为云征文&#xff5c;部署电影收藏管理器 Radarr 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 核心竞争力 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Radarr3.1 Radarr 介绍3.2 Docker 环境搭建3.3 Radarr 部署3.4 Ra…

ubuntu24安装cuda和cudnn

一、安装cuda 确保显卡驱动正确安装 终端输入&#xff1a; nvidia-smi显示下面结果&#xff0c;说明显卡驱动安装正常&#xff0c;可以进行下一步 1.去官网下载CUDA&#xff0c;需要注册账号下载 https://developer.nvidia.com/cuda-toolkit-archive由于我们显卡支持12.2&…

[免越狱]FLEXTool/FLEX 炫酷功能怎么添加到目标App

原因&#xff1a; 这么炫酷的功能&#xff0c;手机又不想越狱&#xff0c;又想体验一波&#xff0c;于是研究了他源码&#xff0c;实现了功能。 1. 下载源码 https://github.com/FLEXTool/FLEX?tabreadme-ov-filehttps://github.com/FLEXTool/FLEX?tabreadme-ov-file 2. 修…

TeamTalk消息服务器(未读计数)

信令和协议设计 enum MessageCmdID {// ...... 省略无关逻辑 CID_MSG_UNREAD_CNT_REQUEST 775,CID_MSG_UNREAD_CNT_RESPONSE 776,// ...... 省略无关逻辑 };message IMUnreadMsgCntReq{//cmd id: 0x0307required uint32 user_id 1;optional bytes attach_data 20; }mes…

[Labview]图片叠加下的表格视图拖拽功能:挖坑粗糙版

没错&#xff0c;又是Labview表格T - T 由于项目中用到的表格上有一张用于画框的二维图片&#xff0c;感兴趣可看这篇 [Labview] 表格单元格外边框 二维图片叠加绘图 因此在滚动条与鼠标滚轮的基础上&#xff0c;想再增加一个拖拽移动的功能。 但 [二维图片] 并没有 拖拽开始…

windows C++ 并行编程-矩阵乘法

下面我们尝试分步演练演示如何使用 C AMP 加速矩阵乘法的执行。 提供了两种算法&#xff0c;一种不使用平铺&#xff0c;一种使用平铺&#xff0c;看看两者的差别。 在 Visual Studio 中创建项目 在菜单栏上&#xff0c;选择“文件”>“新建”>“项目”&#xff0c;打开…

[Algorithm][综合训练][过桥][最大差值][兑换零钱]详细讲解

目录 1.过桥1.题目链接2.算法原理详解 && 代码实现 2.最大差值1.题目链接2.算法原理详解 && 代码实现 3.兑换零钱1.题目链接2.算法原理详解 && 代码实现 1.过桥 1.题目链接 过桥 2.算法原理详解 && 代码实现 解法&#xff1a;贪心 BFS #in…

【Slurm集群在centos7上的搭建】

Slurm集群在centos7上的部署 集群基本情况1. 前期准备工作2.网络配置3.NTP时间同步配置4.NFS共享目录配置5.NIS用户管理配置6.Munge通信部署7.安装Mariadb数据库以及Slurm安装配置7.1安装配置Mariadb及SlurmID配置7.2Slurm安装配置 附录配置文件slurm.conf&#xff1a;slurmdbd…

Redis从入门再再到入门(下)

文章目录 1.Redis远程连接1.1 Redis远程连接配置1.2 通过桌面版图形化界面连接Redis1.3 通过IDEA中的插件连接Redis 2.Jedis的基本使用2.1 jedis概述2.2 jedis的基本操作2.3 jedis连接池 3.Spring整合Redis3.1 新建maven工程,引入相关依赖3.2 redis.properties3.3 spring-redis…

Python | Leetcode Python题解之第387题字符串中的第一个唯一字符

题目&#xff1a; 题解&#xff1a; class Solution:def firstUniqChar(self, s: str) -> int:position dict()q collections.deque()n len(s)for i, ch in enumerate(s):if ch not in position:position[ch] iq.append((s[i], i))else:position[ch] -1while q and po…

如何开发针对不平衡分类的成本敏感神经网络 python

如何开发针对不平衡分类的成本敏感神经网络 深度学习神经网络是一类灵活的机器学习算法&#xff0c;可以在各种问题上表现良好。 神经网络使用误差反向传播算法进行训练&#xff0c;该算法涉及计算模型在训练数据集上产生的误差&#xff0c;并根据这些误差的比例更新模型权重…

鸿蒙开发入门day16-拖拽事件和手势事件

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;还请三连支持一波哇ヾ(&#xff20;^∇^&#xff20;)ノ&#xff09; 目录 拖拽事件 概述 拖拽流程 ​手势拖拽 ​鼠标拖拽 拖拽背板图 …

如何有效防止表单重复提交

如何有效防止表单重复提交 1. 使用重定向&#xff08;Redirect&#xff09;2. 点击后按钮失效3. Loading 遮罩4. 自定义重复提交过滤器 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Web开发中&#xff0c;表单重复提交是一个常见问题&…

计算物理精解【3】

文章目录 力学单位矢量基础定义 矢量加法矢量加法的几何方法矢量加法的代数方法示例注意事项 矢量间的关系矢量&#xff08;或向量&#xff09;的标量积&#xff08;也称为点积、内积或数量积&#xff09;性质计算两矢量之间的夹角例子步骤数值结果 计算两三维矢量之间夹角的例…

厨房老鼠检测算法解决方案老鼠检测算法源码样本详细介绍

厨房老鼠检测算法是一种创新的解决方案&#xff0c;它结合了机器学习和图像识别技术。通过使用高精度的传感器和智能摄像头&#xff0c;这些算法可以实时监控厨房环境&#xff0c;并检测到老鼠的活动痕迹。与传统的检测方法相比&#xff0c;这种算法具有更高的灵敏度和准确性&a…

Java对象的访问定位技术

Java虚拟机规范中规定reference类型是一个指向对象的引用&#xff0c;但规定并没有定义这个引用应该通过什么方式去定位、访问堆中的对象的具体位置&#xff0c;所以对象访问方式取决于具体的虚拟机实现。 目前主流的访问方式有两种&#xff1a;使用句柄和直接指针。 使用句柄…