![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式Linux系统编程学习
文章平均质量分 79
为嵌入式Linux系统编程学习笔记,有误或不全随时修改补充
PoroKing
这个作者很懒,什么都没留下…
展开
-
嵌入式Linux系统编程学习之三十四 Socket 编程
文章目录一、使用 TCP 的流程图1.1 头文件包含1.2 socket 函数二、使用 UDP 的流程图一、使用 TCP 的流程图 TCP 通信的基本步骤: TCP 通信的基本步骤中服务器端的情况。1.1 头文件包含 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <uni原创 2021-12-16 20:56:51 · 1012 阅读 · 0 评论 -
嵌入式Linux系统编程学习之三十三网络相关概念
文章目录一、网络相关名词的概念1.套接口2.端口号3.IP 地址二、Socket 概念总结一、网络相关名词的概念1.套接口 套接口也叫“套接字”,是操作系统内核中的一个数据结构,它是网络中的节点进行相互通信的门户。它是网络进程的 ID。网络通信,归根结底还是进程间的通信(不同计算机上的进程间通信)。在网络中,每一个节点(计算机或路由)都有一个网络地址,也就是 IP 地址。两个进程通信时,首先要确定各自所在的网络节点的网络地址。 但是,网络地址只能确定进程所在的计算机,而一台计算机上很可能同时运原创 2021-12-07 20:53:43 · 280 阅读 · 0 评论 -
嵌入式Linux系统编程学习之三十二Linux网络编程介绍
文章目录一、TCP/IP概述二、OSI参考模型及TCP/IP参考模型总结一、TCP/IP概述 协议(Protocol)指通信双方必须遵循的规矩,由 ISO Internet 规定,写在 RPC 文档中。 OSI 参考模型包括应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 TCP/IP 模型则分为 4 层:应用层,包括 HTTP (超文本传输协议)、FTP(文件传输协议)、TELNET(远程登录)、SSH(安全外壳协议)、STMP(简单邮件发送)、POP3(收邮件);传输层原创 2021-12-02 20:10:43 · 2083 阅读 · 0 评论 -
嵌入式Linux系统编程学习之三十一线程的属性
文章目录前言一、线程属性初始化二、设置绑定属性前言 pthread_create 的第 2 个参数 attr 是一个结构体指针,结构体元素分别指定新线程的运行属性,各成员属性为: _detachstate 表示新线程是否与进程中的其他线程脱离同步,如果置位则新线程不能用 pthread_join 函数来同步,且在退出时自行释放所占用的资源。默认为 PTHREAD_CREATE_JOINABLE 状态。这个属性也可以在线程创建并运行以后用 pthread_detach 函数来设置,而一旦设置为 P原创 2021-11-29 20:17:49 · 370 阅读 · 0 评论 -
嵌入式Linux系统编程学习之三十线程的同步
文章目录一、条件变量1.创建和注销2.等待和激发二、信号灯总结一、条件变量 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起;另一个线程使条件成立(给出条件成立的信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。1.创建和注销 条件变量和互斥锁一样,都有静态、动态两种创建方式。 静态方式使用 PTHREAD_COND_INITIALIZER 常量,如下: pthread_cond_t cond=PTHREAD_CO原创 2021-11-25 21:16:59 · 512 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二十九线程的互斥
文章目录前言一、创建和销毁锁二、互斥锁属性三、锁操作四、加锁注意事项总结前言 在 Posix Thread 中定义了一套专门用于线程互斥的 mutex 函数。mutex 是一种简单的加锁方法,用来控制对共享资源的存取,这个互斥锁只有两种状态(上锁和解锁),可以把互斥锁看作某种意义上的全局变量。为什么需要加锁,就是因为多个线程共用进程的资源,要访问的是公共区间时(全局变量),当一个线程访问时,需要加上锁以防止另外的线程对它进行访问,以实现资源的独占。在一个时刻只能有一个线程掌握某个互斥锁,拥有上锁状态原创 2021-11-23 20:48:27 · 727 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二十八线程的等待退出
文章目录一、等待线程退出二、线程的取消三、线程终止清理函数总结一、等待线程退出 线程从入口点函数自然返回,或者主动调用 pthread_exit 函数都可以让线程正常终止。线程从入口点函数自然返回时,函数返回值可以被其他线程用 pthread_join 函数获取。 pthread_join 函数的原型为: #include <pthread.h> int pthread_join(pthread_t pthid, void * *thread_return);二、线程的取消原创 2021-11-21 21:20:35 · 761 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二十七线程的创建和退出
创建线程实际上就是确定调用该线程函数的入口点,线程的创建采用函数 pthread_create 。在线程创建以后,就开始运行相关的线程函数,在该函数运行完之后,线程就退出,这也是线程退出的一种方式。另一种线程退出的方式是使用函数 pthread_exit ,这是线程主动退出行为。这里需要注意的是,在使用线程函数时,不能随意使用 exit 退出函数进行出错处理,由于 exit 的作用是使调用进程终止,往往一个进程包括了多个线程,所以线程中通常使用 pthread_exit 函数来代替进程中的退出函数 ex原创 2021-11-18 21:02:47 · 1021 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二十六多线程概述
文章目录一、多线程概述二、线程分类三、线程创建的Linux实现一、多线程概述 进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段,这就造成进程在进行切换等操作时都需要有比较复杂的上下文切换等动作。为了进一步减少处理器的空转时间支持多处理器和减少上下文切换开销,于是就出现了线程。 线程通常叫作轻量级进程,线程是在共享内存空间中并发执行的多道执行路径,是一个更加接近于执行体的概念,拥有独立的执行序列,是进程的基本调度单元,每个进程至少有一个 main 线程。它与同进程中原创 2021-11-17 21:06:51 · 227 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二十五信号量
文章目录前言一、System V IPC 机制:信号量1. semget 函数2. semop 函数二、Posix 有名信号量总结前言 信号量与信号量集的概念如下。 信号量:是信号量集中的一个元素,就像整型数组中的一个元素。 信号量集:由若干个信号量组成的集合,就像整型数组是由多个整数组成的一样。 每个信号量都有它的值:非负整数,就像数组中的每个元素都有它的值。同时每个信号量也有它在这个信号量集中的编号,就像数组中的每个元素都有下标一样。数组下标从 0 开始,信号量的编号也从 0 开始。原创 2021-11-16 21:22:42 · 565 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二十四消息队列
文章目录前言一、msgget 函数二、msgsnd 函数总结前言一、msgget 函数二、msgsnd 函数总结原创 2021-11-14 16:36:23 · 866 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二十三 System V 共享内存机制
文章目录前言一、ftok 函数二、shmget 函数总结前言 共享内存也是进程间(进程间不需要有继承关系)通信的一种常用手段。一般 OS 通过内存映射与页交换技术,使进程的内存空间映射到不同的物理内存,这样能够保证每个进程运行的独立性,不至于受其他进程的影响。但可以通过共享内存的方式,使不同进程的虚拟内存映射到同一块物理内存,一个进程往这块物理内存中更新数据,其他进程可以立即看到这块物理内存中修改的内容。 内存映射和共享内存的区别为:内存映射跟普通文件的读写相比,加快了对文件/设备的访问速度;共原创 2021-11-12 20:47:57 · 765 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二十二内存映射
文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings原创 2021-11-11 20:27:26 · 925 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二十一命名管道(FIFO)
文章目录前言一、创建、删除FIFO文件1. 用函数创建和删除 FIFO 文件二、打开、关闭FIFO文件前言 无名管道只能在有亲缘关系的进程间通信,从而大大限制了管道的使用;有名管道突破了这个限制,通过指定路径名的形式实现不相关进程间的通信。一、创建、删除FIFO文件 创建 FIFO 文件与创建普通文件很类似,只是创建后的文件用于 FIFO 。1. 用函数创建和删除 FIFO 文件 创建 FIFO 文件的函数原型为: #include <sys/types.h> #inc原创 2021-11-06 21:19:47 · 738 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二十无名管道(PIPE)
管道是 Linux 进程间通信的一种方式,如命令 ps -ef | grep ntp 。 无名管道的特点包括:只能原创 2021-11-05 21:22:04 · 346 阅读 · 0 评论 -
嵌入式Linux系统编程学习之十九标准管道流
原创 2021-11-03 21:05:38 · 80 阅读 · 0 评论 -
嵌入式Linux系统编程学习之十八进程间通信(IPC)简介
原创 2021-11-01 21:15:40 · 386 阅读 · 0 评论 -
嵌入式Linux系统编程学习之十七计时器与信号
文章目录一、睡眠函数二、时钟处理一、睡眠函数二、时钟处理原创 2021-10-27 19:42:27 · 229 阅读 · 0 评论 -
嵌入式Linux系统编程学习之十六用程序发送信号
文章目录一、kill 和 raise 信号发送函数二、sigqueue 信号发送函数总结一、kill 和 raise 信号发送函数二、sigqueue 信号发送函数总结原创 2021-10-26 19:25:51 · 158 阅读 · 0 评论 -
嵌入式Linux系统编程学习之十五sigaction信号处理机制
文章目录一、信号处理情况分析二、sigaction 信号处理注册总结一、信号处理情况分析二、sigaction 信号处理注册代码如下(示例):总结原创 2021-10-21 19:05:47 · 257 阅读 · 0 评论 -
嵌入式Linux系统编程学习之十四signal信号处理机制
可以用函数 signal 注册一个信号处理函数,原型为: #include <signal.h> typedef void(*sighandler_t)(int); //函数指针 void (*)(int a) sighandler_t signal(int signum, sighandler_t handler); signal 的第 1 个参数 signum 表示要捕捉处理的信号,第 2 个参数是个函数指针,表示对该信号进行捕捉处理的函数,该参数也可以是 SIG_DFL(表原创 2021-10-17 16:11:44 · 200 阅读 · 0 评论 -
嵌入式Linux系统编程学习之十三信号概念
信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件),是硬件中断的软件模拟(软中断),它是 UNIX 进程通信最古老的方法。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程利用它来通知用户空间进程发生了哪些系统事件。它可以在任何时候发给某一进程,而无需知道该进程的状态。 如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它为止;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。一个完整的信号生命周期可以分为原创 2021-10-17 12:25:30 · 165 阅读 · 0 评论 -
嵌入式Linux系统编程学习之十二守护进程
文章目录前言一、守护进程的特性二、daemon 进程的编程规则1.创建子进程,父进程退出2.在子进程中创建新会话前言 daemon 运行在后台,也称作“后台服务进程”,它是没有控制终端与之相连的进程,独立于控制终端,通常周期的执行某种任务。那么一、守护进程的特性二、daemon 进程的编程规则1.创建子进程,父进程退出2.在子进程中创建新会话...原创 2021-10-14 21:15:42 · 233 阅读 · 0 评论 -
嵌入式Linux系统编程学习之十一Linux进程的创建与控制
文章目录一、fork函数二、进程的终止总结一、fork函数fork 函数原型: #include <unistd.h> pid_t fork(void); 在 Linux 中,fork 函数是非常重要的函数,它从已存在进程中创建一个新进程,新进程为子进程,而原进程为父进程。它和其他函数的区别在于:它执行一次返回两个值。其中父进程的返回值是子进程的进程号,而子进程的返回值为0。若出错则返回-1。因此可以通过返回值来判断是父进程还是子进程。 fork 函数创建子进程的过程为:使用原创 2021-10-13 19:50:28 · 396 阅读 · 0 评论 -
嵌入式Linux系统编程学习之十Linux进程概述
文章目录前言一、进程标识二、进程的用户ID与组ID(进程的运行身份)总结前言 进程是一个程序一次执行的过程,是操作系统动态执行的基本单位。 进程的概念主要有两点: 第一,进程是一个实体。每个进程都有自己的虚拟地址空间,包括文本区、数据区和堆栈区。文本区域存储处理器执行的代码;数据区域存储变量和动态分配的内存;堆栈区域存储着活动进程调用的指令和本地变量。 第二,进程是一个“执行中的程序”,它和程序有本质的区别。程序是静态的,是一些保存在磁盘上的指令的有序集合;而进程是一个动态的概念,它是一原创 2021-09-28 22:00:38 · 322 阅读 · 0 评论 -
嵌入式Linux系统编程学习之九基于文件描述符的文件操作
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2021-09-17 23:25:21 · 416 阅读 · 0 评论 -
嵌入式Linux系统编程学习之八基于文件指针的文件操作
文章目录前言一、文件的创建、打开与关闭二、读写文件2.读入数据总结前言一、文件的创建、打开与关闭二、读写文件2.读入数据代码如下(示例):data = pd.read_csv( 'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')print(data.head())总结...原创 2021-08-26 23:26:17 · 247 阅读 · 0 评论 -
嵌入式Linux系统编程学习之七gdb调试器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2021-08-23 20:57:07 · 115 阅读 · 0 评论 -
嵌入式Linux系统编程学习之六make工程管理和Makefile
文章目录前言一、Makefile中特殊处理与伪目标二、变量、规则与函数1.变量2.规则3.函数总结前言 工程管理器指管理较多的文件,它是自动管理器,能根据文件时间自动发现更新过的文件而减少编译的工作量,同时通过读入Makefile文件来执行大量的编译工作。Makefile格式:target:dependency_files //目标项:依赖项<TAB>command //必须以TAB开头,command编译命令一、Makefile中特殊处理与伪目标 .PHONY是原创 2021-08-22 21:32:09 · 194 阅读 · 0 评论 -
嵌入式Linux系统编程学习之五gcc/g++编译器
文章目录前言一、gcc/g++编译过程二、静态库和动态库总结前言 对于.c格式的C文件,可以采用gcc或g++编译,对于.cc、.cpp格式的C++文件,应该采用g++进行编译。常用的选项: -c 表示编译源文件 -o 表示输出目标文件 -g 表示在目标文件中产生调试信息,用于gdb调试 -D<宏定义> 编译时将宏定义传入进去 -Wall 打开所有类型的警告一、gcc/g++编译过程 进行编译时,需要使用一系列的工具,称为工具链。包括:预处理器、编译、汇编器、原创 2021-08-21 00:02:46 · 230 阅读 · 0 评论 -
嵌入式Linux系统编程学习之四Shell编程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2021-08-18 23:52:17 · 251 阅读 · 0 评论 -
嵌入式Linux系统编程学习之三vi编辑器
文章目录前言一、插入文本二、删除与修改三、光标的移动四、查找与替换五、块操作六、结束编辑前言在Linux下编程,使用编辑器vi(vim)、gedit或Emacs,编译链接器gcc,调试器gdb,项目管理器make。一、插入文本 a 从光标后面开始插入文本 A 从光标所在行的末尾插入文本 i 从光标前面开始插入文本 I 从光标所在行的开始插入文本 o 在光标所在行的下一行插入新一行 O 在光标所在行的上一行插入新一行 s 删除光标所在字符,并进入编辑模式 S 删除光标所在行,并进入.原创 2021-08-14 23:54:34 · 153 阅读 · 0 评论 -
嵌入式Linux系统编程学习之二常用命令
嵌入式Linux系统编程学习之二常用命令文章目录嵌入式Linux系统编程学习之二常用命令前言一、常用命令1.su(用户切换)2.useradd(添加用户)3.passwd(修改密码)4.进程相关(系统管理)命令4.1 ps命令(一次性查看进程)4.2 kill命令(杀死指定进程名的进程)4.3 top命令(动态监视任务)4.4 jobs命令(观察后台进程)总结前言Linux下两种账号:root(系统管理员)、普通用户提示:以下是本篇文章正文内容,下面案例可供参考一、常用命令1.su(用户切换原创 2021-08-14 21:48:59 · 332 阅读 · 0 评论 -
嵌入式Linux系统编程学习之一目录结构
嵌入式Linux系统编程学习之一目录结构文章目录嵌入式Linux系统编程学习之一目录结构前言一、Linux目录结构前言Linux目录结构一、Linux目录结构/bin:存放Linux的常用命令/boot:存放系统启动时用到的程序/dev:包含Linux系统中使用的所有外部设备(实际上是访问这些外部设备的端口)/etc:存放系统管理时要用到的各种配置文件和子目录(网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等)/sbin:存放系统管理员的系统管理程序/home:原创 2021-08-11 20:27:24 · 197 阅读 · 0 评论