当前位置: 首页 > news >正文

Linux和C语言的学习方法你真的知道吗?

★Linux的使用

第一天,就给我们讲了为什么要先学c、学linux:因为嵌入式的根本就是软件驱动硬件,而C语言是最接近硬件的语言、有指针的概念、可以直接操作硬件,另外,功能复杂的硬件是含有操作系统的,这就需要我们选择使用广泛而开源的linux来学习。

◇Shell 命令

shell是一个命令行解释器,命令行格式为:命令名称、选项、参数,常用的命令有:cd进入目录;ls显示目录下的文件;touch、mkdir创建文件、文件夹;mv、cp、rm移动、复制、删除文件和文件夹;zip、gzip、tar压缩和解压文件;ln创建软硬链接文件。   

◇文件管理、用户管理

Linux是一个多用户系统,它可以用adduser来创建多个用户,并用su来进行不同用户及用户与管理员之间的切换;另外,与目录结构属于分区的windows不同,在Linux的文件系统中,分区属于目录结构。

◇软件管理

ubuntu上的软件包管理工具apt可以通过网络很方便地完成软件包的获取、安装、卸载、查询等操作。比如,当我们在使用putty前需要安装SSH的时候,就可以通过命令:sudo apt-get update、sudo apt-get install SSH 来安装。

◇VI 编辑器,GCC 编译器 

Vi是Linux系统中常用的一个文本编辑器,通过vi加上文件名可以对文件创建或编辑。三种模式中:命令模式是我们进入编辑器的第一模式,可以对文本进行剪切复制替换删除操作;输入模式可以是对文件进行常规编辑;底行模式可以保存文本并退出。vi编辑好的c文件需要被编译二进制文件才可以被机器识别运行,而GCC 编译器就承载着这样的功能,它通过预处理、编译、汇编、链接四个步骤完成该操作。

★C语言编程

C语言学习的开始就是掌握基本的语法规则,主要包括各种基本类型常量变量、运算符、控制流、函数的使用。这部分总的来说没有什么难度,但有一些容易忽略的细节需要留意,如同为单目运算的*解引用和++操作同时使用时哪个优先运算;数组被定义后其空间大小和首地址不允许改变;要用strcmp()判断字符串相等而不能直接用==;指针定义后但没初始化会变成野指针,后续使用可能发生段错误;使用较大的数据时应在堆中开辟空间存放以防栈溢出。

☆数据结构

数据结构就是对数据进行人为的格式化规范化储存,使得数据能够快捷地增删查改,不同的数据结构有不同的优缺点及主要用途,如顺序表查找快增删慢而链表查找满增删快。鉴于内核链表的重要性及以后使用的广泛性,在此只做内核链表的总结。内核链表和双向循环链表类似,与之不同的是,内核链表将数据和链表剥离开,并提供了很多的宏和封装函数。其中非常重要的是list_for_each()、list_entry(),它们分别实现了对小结构体(循环链表)的遍历操作、通过小结构体的地址反推找到大结构体的地址,从而通过大结构体得到其下的数据域。另外还有list_add()、list_del_init()封装实现了对大结构体节点的插入、孤立删除,不然自己搭建双向循环链表的话,就需在头插node节点时要写上经典的四句指针域重连接指令:①node->next = head->next;②head->next->pre = node;③node->pre = head;④head->next = node;

☆文件IO

这里的iO指的是内存和磁盘间的文件交互,由于linux“一切皆文件的”的特性,其7种类型的文件都是可以被输入输出的。其间我们重点学习了文件IO和标准IO,他们的主要区别就是前者直接调用系统函数没有缓冲区,而后者调用的是封装好的库函数有缓冲区。一般来说,文件IO是专门给文件使用的,而标准IO是专门给设备使用的。文件、标准io的打开和关闭所用的函数是相似的,只是一个有f一个没f;但他们的读写函数差别就比较大了,文件io用的是read()、write(),而标准IO根据输入输出是否格式化分为printf、put、scanf、get,具体还会根据一字一行一块地读写及读写目标地的不同而有所不同。另外还了解了下利用time()、ctime()来获取标准时间并转化为可阅读化时间的时间编程,以及通过lstat()、opendir()、readdir()来查看目录下的文件属性。最后介绍了动静态库的概念及制作,前者在文件运行时才加载到可执行文件中,而后者在编译时即完成,至于二者制作步骤的话比较复杂,需要用到的时候再对照着笔记制作好了。

☆进程线程

这部分我想是重中之重,毕竟进程线程出现的一大动机就跟人类的无限欲望相关联:想要在越短的时间做越多的事情。进程就是执行中的程序,但与只包含指令和数据的程序不同,进程有属于自己的地址空间,里面不仅含有指令段数据段,还有动态的堆栈段,因此多个进程可以实现了同一时间做多个任务。进程通过fork()函数创建,对应的PCB由内核创建并保存在内核空间。尽管多核芯片的出现可以让多个进程真的在同时执行任务,但不是所有进程都同时处于运行状态的,更多的进程是在极小的时间片段下轮流替换着来工作,至于替换的顺序是由cpu调度机制决定的,我们无法确定,这也是为什么进程拥有异步特性的原因。未在运行状态的进程往往处于队列就绪等待状态或休眠状态,其它具体的状态可以通过命令ps -aux查看。此外,运行中的进程还分为前台运行和后台运行,如果进程是后台运行的话,就不能对它进行前台操作,如不能对它ctrl + c暂停,这时候可以通过fg指令把它转变为前台运行或直接用kill指令终止进程。被创建后的进程是有生命周期的,它不但可以exit()自行终止进程,还可以用exec函数族中途改为执行新的进程,殊途同归,进程最后都是要终止的,终止后的进程的PCB需要被其父进程wait()回收,中间有差错的话就可能导致孤儿进程或僵尸进程的出现。

当需要进程不受干扰地一直在后台运行、周期性地等待或者执行某一个任务的时候,可以将它设置为守护进程。守护进程不与任何终端关联,即使终端关闭了也还是会照常运行,老师教的7步创建法得记熟。值得注意的是,因为守护进程无法往标准输出打印,中间出错了也没人知道,所以得找个地方储存它的运行情况,因此系统日志应运而生。系统日志可以通过命令cat /var/log/syslog查看。

进程可以通过无名管道、有名管道、信号、共享内存、消息队列、信号量来进行进程间通信,这些通信方式都是在内核中得以实现的。具体的函数及使用笔记上都有详细记录,就不再赘述了。值得留意的是无名有名管道、消息队列中的同一数据是读了一次就没有了的,而共享内存中的同一数据可以被多次读取。

进程和线程都是为了实现计算机的并发功能,但是进程的创建消亡,及进程间的切换都很耗费资源,每次切换进程都要进程上下文切换。线程的优势是多个线程共享指令和全局变量,这就减少了资源管理的消耗,从而更专注于任务的执行。但有优点就有缺点,资源的共享可能会致使多个线程同时对临界资源进行操作,从而导致运算结果的不准确。为了解决这一问题,出现了线程的互斥与同步。线程互斥利用mutex锁在临界区的前后分别pthread_mutex_lock()上锁和pthread_mutex_destroy()解锁,实现同一时间只允许一个线程操作临界资源。线程的同步用的是信号量,相当于加上了数量的线程的互斥,通过合理地使用p+1、v-1操作使得多个线程按一定次序运行。

相关文章:

Linux和C语言的学习方法你真的知道吗?

★Linux的使用 第一天,就给我们讲了为什么要先学c、学linux:因为嵌入式的根本就是软件驱动硬件,而C语言是最接近硬件的语言、有指针的概念、可以直接操作硬件,另外,功能复杂的硬件是含有操作系统的,这就需…...

代码随想录day42

1049. 最后一块石头的重量 II https://leetcode.cn/problems/last-stone-weight-ii/ 这个自己还是没想出来01背包对应。 本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。 stones [2,7,4,1,8,1]也就是sum…...

【笔记】两台1200PLC进行S7 通信(1)

使用两台1200系列PLC进行S7通信(入门) 文章目录 目录 文章目录 前言 一、通信 1.概念 2.PLC通信 1.串口 2.网口 …...

统一网关Gateway

为什么需要网关 网关功能: 身份认证和权限校验服务路由,负载均衡 根据请求判断找到对应的服务路由,然后服务可能有多个实例,这个时候网关就会做一个负载均衡去挑选一个实例调用.请求限流 限制请求的数量,这是微服务的…...

6、kubernetes(k8s)安装

本文内容以语雀为准 文档 等等,Docker 被 Kubernetes 弃用了?容器运行时端口和协议kubeadm initkubeadm config安装网络策略驱动使用 kubeadm 创建集群 控制平面节点隔离 持久卷为容器设置环境变量在CentOS上安装Docker引擎Pod 网络无法访问排查处理 说明 本文…...

python-批量下载某短视频平台音视频标题、评论、点赞数

python-批量下载某短视频平台音视频标题、评论数、点赞数前言一、获取单个视频信息1、获取视频 url2、发送请求3、数据解析二、批量获取数据1、批量导入地址2、批量导出excel文件3、批量存入mysql数据库三、完整代码前言 1、Cookie中文名称为小型文本文件,指某些网…...

【数据结构与算法】单链表的增删查改(附源码)

这么可爱的猫猫不值得点个赞吗😽😻 目录 一.链表的概念和结构 二.单链表的逻辑结构和物理结构 1.逻辑结构 2.物理结构 三.结构体的定义 四.增加 1.尾插 SListpushback 2.头插 SListpushfront 五.删除 1.尾删 SListpopback 2.头删 SListpo…...

华为OD机试 - 回文字符串

题目描述 如果一个字符串正读和反渎都一样(大小写敏感),则称它为一个「回文串」,例如: leVel是一个「回文串」,因为它的正读和反读都是leVel;同理a也是「回文串」art不是一个「回文串」,因为它的反读tra与正读不同Level不是一个「回文串」,因为它的反读leveL与正读不…...

C语言太简单?这14道C语言谜题,你能答对几个

14个C语言的迷题以及答案,代码应该是足够清楚的,而且有相当的一些例子可能是我们日常工作可能会见得到的。通过这些迷题,希望你能更了解C语言。 如果你不看答案,不知道是否有把握回答各个谜题?让我们来试试。 下面的…...

Benchmark测试——fio——源码分析

1. main 1.1 parse_options() 解析选项&#xff0c;更新数据结构 1.1.1 fio_init_options() 1.1.2 fio_test_cconv(&def_thread.o) <cconv.c> 1.1.2.1 convert_thread_options_to_cpu() 传递options给数据结构 1.1.3 parse_cmd_line() switch语句多路选择&am…...

测量 R 代码运行时间的 5 种方法

简介 平常在撰写论文时&#xff0c;会需要比较算法之间的计算时间。本篇文章给出几种测量 R 代码运行时间的方法。本文是小编学习过程中的笔记&#xff0c;主要参考博客1&#xff0c;2。 1. 使用 Sys.time() 小编通常使用 Sys.time() 函数来计算时间。首先记录当前运行时刻&…...

Qt 第9课、计算器中缀转后缀算法

计算器核心算法&#xff1a; 1、将中缀表达式进行数字和运算符的分离 2、将中缀表达式转换成后缀表达式 3、通过后缀表达式计算最后的结果 二、计算器中缀转后缀算法 计算器中缀转后缀算法的意义在于把中缀表达式转换成后缀表达式&#xff0c;能够更好地计算 算法的基本思路…...

docker的使用方法

docker技术 同一个操作系统内跑多套不同版本依赖的业务 docker可以使同一个物理机中进程空间&#xff0c;网络空间&#xff0c;文件系统空间相互隔绝 虚拟机弊端&#xff1a;每个需要安装操作系统&#xff0c;太重量级&#xff0c;资源需要提前分配好 部署程序 开发环境 win…...

Kafka(五)生产者向发送消息的执行流程

&#xff08;1&#xff09;生产者要往 Kafka 发送消息时&#xff0c;需要创建 ProducerRecoder,代码如下&#xff1a; ProducerRecord<String,String> record new ProducerRecoder<>("CostomerCountry","Precision Products","France&q…...

华为OD机试模拟题 用 C++ 实现 - 简易压缩算法(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明简易压缩算法题目输入输出示例一输入输出说明示例二输入输出说明示例三输入输出说明...

MATLAB R2022b 安装教程

MATLAB R2022b 安装教程MathWorks 于2022年9月发布了 MATLAB 和 Simulink 产品系列的最新版本 Matlab R2022b版本 &#xff0c;加入两个新产品&#xff1a; Medical Imaging Toolbox — 可视化、配准、分割和标注二维及三维医学图像Simscape Battery — 设计和仿真电池和储能系…...

PCI子系统

很多网络接口卡都是外围组件互联&#xff08;Peripheral Compaonent Interconnect&#xff09;设备&#xff0c;必须与Linux PCI子系统协同工作&#xff0c;并非所有的网络接口都是PCI设备&#xff0c;很多嵌入式设备的网络接口连接的就不是PCI总线&#xff0c;这些设备的初始化…...

Spring源码之IoC容器的Bean创建和依赖注入,DefaultListableBeanFactory容器为例

接上篇Spring源码之IoC容器初始化过程&#xff0c;以FileSystemXmlApplicationContext容器为例 因为FileSystemXmlApplicationContext使用的容器为DefaultListableBeanFactory&#xff0c;所以该篇基于DefaultListableBeanFactory的实现分析依赖注入过程。 目录获取Bean的总体流…...

解决小程序页面scroll-view块自身滑动问题

修改scroll-view的style样式 本来通过函数限制高度 style"margin-top:200rpx;"height: calc(100vh - 200rpx - env(safe-area-inset-bottom));会出现整个scroll-view块位置不固定滑动里面的内容后&#xff0c;自己本身在整个页面内上移&#xff0c;将样式改为&#…...

PowerCommand康明斯发电机控制屏维修HMI211

康明斯柴油发电机的监控系统分为普通机组控制屏和智能化机组控制界面。普通操作界面实用于普通的康明斯柴油发电机的控制&#xff0c;康明斯柴油发电机的起动与停止、供电与断电、状态调整等均由手动操作&#xff1b;自动化康明斯柴油发电机控制系统适合于智能化康明斯柴油发电…...

ELK + Kafka 测试

配置file beat输出到 Kafkalogstash服务器从kafka获取数据并输出到es集群在es集群上查看索引kibana界面添加索引查看数据1.配置file beat输出到 Kafka 1.1 Filebeat机器配置数据采集和输出目标 做好域名解析 # vim /usr/local/filebeat/filebeat.yml # 修改输出目标为kafka…...

迁移系统:换电脑或者硬盘转移磁盘文件的方法!

为什么要将操作系统迁移到新驱动&#xff1f; “将操作系统转移到新驱动您好&#xff0c;我刚刚为我的台式机订购了一个新的2TB希捷Barracuda硬盘&#xff0c;我想知道如何将我的Windows 10操作系统与我下载的其他一些软件一起转移过来。我使用新的/大的硬盘&#xff0c;然…...

职场性别报告,男女薪酬仍有差距,男性平均薪酬比女性高29.7%

性别是否影响职业&#xff1f;女性求职比男性更加困难&#xff1f;男性薪酬比女性更有优势&#xff1f;人们一说到警察、建筑师通常会想到高大魁梧的男性形象&#xff0c;一说到幼师、护士往往想到的都是温柔的女性形象&#xff0c;职业好似与性别挂钩&#xff1b;女性求职通常…...

5-Azidopentanoic acid,79583-98-5,5-Azidopentanoic COOH具有高效稳定,高特异性

5-Azidopentanoic acid&#xff0c;5-Azidopentanoic COOH&#xff0c;5-叠氮基戊酸产品规格&#xff1a;1.CAS号&#xff1a;79583-98-52.分子式&#xff1a;C5H9N3O23.分子量&#xff1a;143.074.包装规格&#xff1a;1g&#xff0c;5g&#xff0c;10g&#xff0c;包装灵活&a…...

滴滴前端高频react面试题汇总

说说 React组件开发中关于作用域的常见问题。 在 EMAScript5语法规范中&#xff0c;关于作用域的常见问题如下。 &#xff08;1&#xff09;在map等方法的回调函数中&#xff0c;要绑定作用域this&#xff08;通过bind方法&#xff09;。 &#xff08;2&#xff09;父组件传递…...

能在软路由docker给部署搭建teamsperk服务器么?并且设置好ddns

参考链接(4条消息) 【个人学习总结】使用docker搭建Teamspeak服务器_blcurtain的博客-CSDN博客_teamspeak3 docker(⊙﹏⊙)哎呀&#xff0c;崩溃啦&#xff01; (tdeh.top)TeamSpeak服务器搭建与使用 - 缘梦の镇 (cmsboy.cn)Openwrt X86 docker运行甜糖-软路由,x86系统,openwrt…...

应用统计学实验1-蒙特卡罗方法求解定积分

目录 1. 用蒙特卡罗方法计算定积分(随机投点法) 2. 用蒙特卡罗方法计算定积分(平均值法)...

用Pyhon编写一个属于自己的nmap

用Pyhon编写一个属于自己的nmap 文章目录用Pyhon编写一个属于自己的nmap导入 socket 模块&#xff0c;确定目标主机 IP 或域名以及需要扫描的端口列表开始扫描、扫描每个端口创建一个 socket 对象&#xff0c;用于建立 TCP 连接尝试连接目标主机的指定端口如果连接成功&#xf…...

电信网上用户资管理系统的设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;在对目前市面上已经拥有的营业厅功能分析和整理后&#xff0c;为了保证营业厅中多种功能的分层次处理设计了一个的电信网上用户自管理系统&#xff0c;以web页面方式实现了与用户的交互&#xff0c;同时保证了移动电话计费管理系统…...

js函数柯里化-面试手写版

概念 用我自己的话来总结一下&#xff0c;函数柯里化的意思就是你可以一次传很多参数给curry函数&#xff0c;也可以分多次传递&#xff0c;curry函数每次都会返回一个函数去处理剩下的参数&#xff0c;一直到返回最后的结果。 实例 这里还是举几个例子来说明一下&#xff1…...

贵港市建设局网站/推广之家

一&#xff0e; RMAN 备份的一些优点和OS命令备份方式相比&#xff0c;使用RMAN的优点1 备份执行期间不需要人工干预&#xff0c;因此减少了误操作的机会&#xff1b;2 可以有效的将备份和恢复结合起来&#xff1b;3 支持除逻辑备份以外的所有备份类型&#xff0c;包括完全备…...

怎么找到网站后台/百度seo怎么查排名

在 Windows 系统中&#xff0c;当你打开命令提示符(cmd)窗口时&#xff0c;它会默认打开在 C 盘根目录。这是因为 C 盘是系统盘&#xff0c;通常包含系统文件和程序&#xff0c;所以它是默认的工作目录。 你可以通过在命令提示符中使用 cd 命令来更改当前工作目录。例如&#x…...

网站建设骗子公司/南平seo

一、提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二、准备数据库表和存储过程 create table p_user( id int primary key auto_increment, name varchar(10),sex char(2) ); insert into p_user(name,sex) values(A,"男"); insert into p…...

网站建设教程视频/2022年seo还值得做吗

对w3wp.exe的一点认识!很想看一个网站的内容,但是这个网站没有RSS,还得整天的去打这个网站!感觉比较郁闷,正好今天有时间,你不能提供订阅,我自己来生成RSS,自己来搞定订阅的问题. 实现这个功能的思路比较简单:获取该网址的Html源代码,通过正则表达式过滤出有用的数据,将这些有用…...

关于织金县网站建设的论文/万州网站建设

日志信息 故障现象描述 与硬盘关系 scsi1: ERROR on channel 0, id 7, lun 0, CDB: Read (10) 00 73 fc 62 bf 00 00 80 00 Info fld0x73fc6326, Current sdi: sense key Medium Error Additional sense: Unrecovered read error SMART规范定义“Medium Error”错误是一种不…...

专业手机网站建设公司排名/黑科技引流工具

Facebook 又收到一张罚单。 周四&#xff0c;欧盟反垄断部门决定对 Facebook 处以 1.1 亿欧元&#xff08;约 8.43 亿元&#xff09;的罚款&#xff0c;理由是在 WhatsApp 的收购案中&#xff0c;Facebook 提供了有误导性的不实信息。这个数字大约是 Facebook 一年营收额的 0.5…...