《Linux系统编程训练营》11_信号发送与处理(上)

4 月 15 日
阅读 3 分钟
24
信号的概念与分类问题:按下 Ctrl + C 后,命令行中的前台进程会被中止。为什么???什么是信号?信号是一种 “软件中断”, 用来处理异步事件内核发送信号到某个进程,通知进程事件的发生时间可能来自硬件,可能来自用户输入,可能来自除零错误信号是一种类型的进程间通讯方式(一个进程向另一个进程发送信号)A 进程发生事...

《Linux系统编程训练营》10_守护进程深度分析

1 月 9 日
阅读 5 分钟
168
1、 关闭标准输入输出和标准错误输出2、 将 stdin 关联到终端设备 : STDIN_FILENO -> 03、 将 stdout 关联到终端设备 : STDOUT_FILENO -> 14、 将 stderr 关联到终端设备 : STDERR_FILENO -> 2

《Linux系统编程训练营》9_Linux 进程层次分析

2023-09-24
阅读 10 分钟
434
详解 Linux 进程组每个进程都有一个进程组号 (PGID)进程组:一个或多个进程的集合(集合中的进程并不孤立)进程组中的进程通常存在父子关系,兄弟关系,或 功能相近进程组可方便进程管理(如:同时杀死多个进程,发送一个信号给多个进程)每个进程必定属于一个进程组,也只能属于一个进程组进程除了有 PID 外,还有 PGID...

《Linux系统编程训练营》8_Linux 终端与进程

2023-09-18
阅读 4 分钟
699
详解控制台与终端有趣的问题:Linux 的终端,控制台,TTY, PTY 究竟是什么?它们与进程有什么关系?历史回顾:控制台控制台是一个直接控制设备的面板(属于设备的一部分)计算机设备的控制台:按键 & 指示灯 (键盘 & 显示器)早期的电子计算机必然有一个控制台历史回顾:终端 (Terminal)终端是一台独立于计算机的机器...

《Linux系统编程训练营》7_进程创建大盘点

2023-09-17
阅读 7 分钟
281
vfork 与进程创建进程创建回顾 {代码...} 问题:进程创建是否只能依赖于 fork() 和 execve() 函数?再论进程创建fork() 通过完整复制当前进程的方式创建新进程execve() 根据参数覆盖进程数据(一个不留)pid_t vfork(void);vfork() 用于创建子进程,然而不会复制父进程空间中的数据vfork() 创建的子进程直接使用父进程空...

《Linux系统编程训练营》6_深入 Linux 系统

2023-09-17
阅读 10 分钟
201
进程的数据输入输出问题:进程参数 和 环境变量 对于进程意味着什么?进程参数和环境变量的意义一般情况下,子进程的创建是为了解决某个子问题子进程解决问题需要父进程 "数据输入" (进程参数 & 环境变量)设计原则:子进程启动时必然用到的参数使用进程参数传递子进程解决问题可能用到的参数使用环境变量传递思考 ...

《Linux系统编程训练营》5_环境变量编程

2023-09-16
阅读 14 分钟
497
初识环境变量问题:环境变量是什么?有什么意义? {代码...} main 函数(默认进程入口)int main(int argc, char *argv[], char *env[])argc 命令行参数个数 (启动参数)argv[] - 命令行参数数组 (启动参数)env[] - 环境变量数组(最后一个元素为 NULL)什么是环境变量环境变量是进程运行过程中可能用到的 "键值对" (N...

《Linux系统编程训练营》4_进程参数编程

2023-09-11
阅读 6 分钟
619
进程空间概要分析问题execve(...) 的参数分别是什么?有什么意义? {代码...} execve 的本质是系统调用而非函数!!main 函数(默认进程入口)int main(int argc, char *argv[]) {代码...} 注意:启动参数和环境变量 【拷贝】 于父进程进程空间概要进程参数存储分析mem.c {代码...} {代码...} 下面程序输出什么?为什么...

《Linux系统编程训练营》3_初试 Linux 进程

2023-09-07
阅读 10 分钟
795
问题: strace 输出中的 execve(...)究竟是什么?进程理论状态切换进程生命周期Linux进程基本概念进程是 Linux 任务的执行单元,也是 Linux 系统资源的分配单位每个 Linux 应用程序运行后由一个或多个进程一个 Linux 进程可以执行一个或多个程序Linux 进程有多种不同状态(即:Linux 进程有不同的活法)Linux 进程状态剖...

《Linux系统编程训练营》2_深入理解系统调用

2023-09-06
阅读 51 分钟
915
一般来说,大部分 CPU 至少具有两种工作方式高特权级 (Ring 0) : 可以访问任意的数据,包括外围设备,比如网卡、硬盘等(内核模式)

《Linux系统编程训练营》1_Linux系统概要

2023-06-29
阅读 3 分钟
1.1k
再论计算机系统计算器系统由”躯体“和”灵魂“两部分组成”躯体“ : 构成计算机系统的电子设备(硬件)”灵魂“ :指挥 ”躯体“ 完成 ”动作“ 的指令序列 (软件)”躯体“ 核心 :中央处理器 (CPU)”灵魂“ 核心 :操作系统(OS) {代码...} 数据输入与输出是计算机系统不可获取的部分计算任务执行流程通过交互设备或网络向计算机...

《Linux网络开发必学教程》31_文件服务器最终实现

2023-06-10
阅读 3 分钟
1.1k
问题: # favicon.ico 简介 是什么?请求如何处理?favicon.ico 简介favicon.ico 是网页上的图标文件名称:默认名称位 favicon.ico尺寸:16x16、32x32、48x48、64x64、128x128颜色: 8 位、24 位 或 32 位一般说,在网页中可以通过 HTML 语句设置图标文件<link rel="shortcut icon" href="/favicon.ico...

《Linux网络开发必学教程》30_文件浏览交互涉及

2023-06-08
阅读 9 分钟
905
问题:浏览器与文件服务器如何交互?浏览器与文件服务器的交互文件浏览点击列表中的文件夹 → 进入子文件夹(展示子文件夹列表)文件下载点击列表中的文件 → 下载目标文件错误处理向服务器发送错误请求 → 浏览不存在的文件夹 / 下载不存在的文件文件浏览交互实现实现中的关键概念共享文件夹(root)服务端启动时指定的共...

《Linux网络开发必学教程》29_动态创建交互页面

2023-06-05
阅读 7 分钟
1.1k
问题:如何创建浏览器中的文件展示页面?再论前端页面交互页面分析静态部分表格,页面结构动态部分文件浏览路径 (Path)文件列表(Table) {代码...} 文件列表分析静态表格标题行表格列表结构动态部分表格行数据 {代码...} 文件列表接口函数及数据结构Table *CreateTable();Table *InsertRow(Table *table, RowInfo *info...

《Linux网络开发必学教程》28_浏览器请求响应实现

2023-06-04
阅读 7 分钟
910
文件服务器架构职责定义主线程命令行输入,管理员可控制服务端工作状态监听线程服务端启动后对客户端连接进行监听的工作环境通讯线程客户端连接成功后与服务端的数据交互环境主线程 {代码...} {代码...} 交互流程一交互流程二监护线程 {代码...} 请求响应流程通讯流程 {代码...} 编程实验:实现请求响应main.c {代码...}...

《Linux网络开发必学教程》27_文件服务器可行性分析

2023-06-04
阅读 8 分钟
865
需求分析服务端启动时指定某本地文件夹作为网络共享文件夹共享文件夹中的所有文件及子文件夹均可被客户端访问使用浏览器作为客户端,在浏览器中可“看到”所有共享文件用户可在浏览器中将目标文件下载到本地服务端可暂定服务,但不影响正在下载目标文件的客户端技术可行性分析服务端网络通讯基于 Http 协议与客户端浏览器...

《Linux网络开发必学教程》26_Web 前端开发基础

2023-06-04
阅读 4 分钟
830
关于 Http 应用程序基于 Http 的应用程序本质上是一种特殊的 C/S 模型应用Http 应用程序的底座是 TCP 协议(即:socket 可完成应用)常见的 Http 客户端为浏览器,服务端为 Web 服务器简单理解:Http 应用程序 ←→ TCP 应用程序 + 文本处理应用程序值得思考的问题浏览器为什么能成为 “万能客户端” ?什么是 HTML ?HTML ...

《Linux网络开发必学教程》25_Http 协议基础

2023-06-03
阅读 2 分钟
1.2k
Http 是什么?Http 作为 WWW 的重要组成部分被提出(World Wide web)而当时的 WWW 是为了帮助研究者更好的进行知识共享基本理念:文档之间的相互关联形成超文本,最终连城相互参阅的 WWWHttp (Hyper Text Transfer Protocol)用于定义文档之间如何跳转,即:文档传输协议Http 是什么?Http 是位于 TCP/IP 之上的应用层通...

《Linux网络开发必学教程》24_物联网服务模块实现(非必要)

2023-06-03
阅读 2 分钟
1.1k
笔者无对应硬件开发板,对涉及硬件操作部分的代码不做全部展开。(不影响主线理解)问题:服务模块如何获取真实环境信息?外设简介设备驱动开发基础GPIOGPIO 即: General-Purpose Input/Output, 通用型输入输出在硬件设备上,GPIO 通常表现为引脚 (Pin), 输出为高电平或低电平程序设计中,可通过代码控制指定 GPIO 的...

《Linux网络开发必学教程》23_客户端服务端交互实现

2023-06-03
阅读 3 分钟
800
问题:客户端业务逻辑如何实现?与服务设备交互细节如何设计?客户端业务逻辑实现用户输入处理字符串空格处理,分割获取命令与参数服务信息处理字符串预处理,分割获取服务命令存储服务命令与设备地址之间的映射(命令字符串 👉 地址字符串)客户端业务逻辑实现 - 用户输入处理 {代码...} {代码...} {代码...} 服务端逻辑...

《Linux网络开发必学教程》22_客户端设计与初步实现

2023-05-30
阅读 6 分钟
488
问题:Response Task 和 Server Task 的业务逻辑如何实现?客户端如何实现?再论交互流程交互详细设计(Message::payload)客户端主动发起服务查询(局域广播)服务设备将自身能提供的服务信息及用法返回(字符串描述)客户端根据收到的服务用法向设备发起请求(字符串描述)服务设备接收命令并匹配服务,并返回服务结果...

《Linux网络开发必学教程》21_智能家居服务发现实现

2023-05-30
阅读 5 分钟
627
服务设备软件代码复用将网络通讯框架移植到开发板,之后,可使用框架中的组件实现 Response Task 和 Server Task框架移植注意事项Lwip 是微型 TCP/IP 协议栈 (并非完整 TCP/IP协议栈)支持 socket 接口,但一些功能未实现socket 接口所在头文件不同于 Linux 和 Window 平台完成可执行测试,对测试中出现的问题及时修复...

《Linux网络开发必学教程》20_物联网设备 WIFI 模块实现(非必要)

2023-05-28
阅读 7 分钟
796
问题:如何在设备上进行 WIFI 编程?Lwip (Light weight IP) 简介Lwip 是轻量化的TCP/IP,是一个小型开源的 TCP/IP 协议栈LwIP 的设计目标是用较少的资源实现完成的 TCP/IP 协议栈Lwip 能在操作系统中运行,也能在无操作系统的情况下独立运行Lwip 提供了 Socket API 和 Netconn APILwip 的主要特性支持 ARP, ICMP, IGMP...

《Linux网络开发必学教程》19_分布式智能家居项目雏形

2023-05-23
阅读 3 分钟
969
需求分析客户端进入室内后能够主动发现服务(如,环境服务,灯光服务)各种服务可以有不同的载体(如:由不同设备提供)各种服务之间,服务与客户端之间完全无耦合(服务可自由增减)客户端可以是移动 APP ,可以是桌面软件 。。。技术可行性分析发现服务: UDP 广播 + 自定义协议客户端主动广播服务查询协议包服务设备...

《Linux网络开发必学教程》18_网络通讯框架的完善

2022-05-12
阅读 8 分钟
969
问题:如何扩展之前的通信框架,使其支持 UDP 通信,进而成为一个完善的网络通讯框架?UDP 通讯扩展UDP 通信实体概要设计每个 UDP Point 地位对等(因为不必主动发起连接),可通过 ip 地址和 port 号进行通讯UDP Point 数据收发单位为: Message 或 Byte在接受口设计上,与 TcpClient 保持一致(框架接口一致性)目标:...

《Linux网络开发必学教程》17_深入 UDP 数据收发 (下)

2022-05-10
阅读 5 分钟
1.3k
问题: UDP 是否还有其他一对多的数据发送方式?UDP 通讯中的多播多播是向特定组中的所有主机传输数据的方法,多播也称之为组播多播数据传输的特点:多播发送者针对特定的多播组,只发送 1 次数据,组内主机均可接收到数据主机加入特定组,即可接收该组中的多播数据多播组可在 IP 地址范围内任意添加关键问题:如何收发...

《Linux网络开发必学教程》16_深入 UDP 数据收发 (上)

2022-05-09
阅读 4 分钟
1.1k
问题:如何进行一对多的 UDP 数据发送?UDP 通讯中的广播广播是向同一网络中的所有主机传输数据的方法广播类型直接广播:IP 地址中除网络地址外,其余主机地址均设置为 1本地广播:无需知道网络,使用 255.255.255.255 作为 IP 地址使用区别本地广播数据不经过路由器寻址,直接发送到本地主机本地广播应用案例:DHCPDHCP...

《Linux网络开发必学教程》15_UDP 数据收发实战

2022-05-09
阅读 4 分钟
904
问题:如何使用 UDP 进行数据收发?再论 UDP 协议UDP 是无连接的(不可靠的,无应答消息,数据包无序号标识)UDP 是面向数据包的,对应用层数据既不合并也不拆分(保留数据包边界)UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低UDP 支持一对一,一对多,多对一和多对多的交互通信UDP 消息头开销小,只有 ...

《Linux网络开发必学教程》14_数据收发的扩展用法 (下)

2022-05-08
阅读 13 分钟
1.1k
MSG_PEEK (数据窥探)使用 MSG_PEEK 选项能够获取接收缓冲区数据的拷贝recv() 专用选项,可用于数据预接收指定 MSG_PEEK 选项时,不会清空缓冲区可用于获取接收缓冲区种的数据量(字节数)当接收缓冲区中没有数据时,MSG_PEEK 也会导致线程阻塞下面的代码输出什么?为什么? {代码...} client.c {代码...} server.c {代...

《Linux网络开发必学教程》13_数据收发的扩展用法 (上)

2022-05-07
阅读 8 分钟
1.2k
write() 和 send() 都可以收发数据,有什么区别?send 可以使用 flags 指定可选项信息,其中 0 表示默认发送行为send 当 flags 为 0 时,会等待发送缓冲区数据清空之后才将数据放入发送缓冲器然后返回write 不能指定可选项信息,同时不会阻塞read() 和 recv() 都可以接收数据,有什么区别?recv 可以使用 flags 指定可选...