WebSocket协议里客户端发送给服务器的数据会用4字节的掩码循环异或的分析
首先,我需要回顾WebSocket协议中对掩码处理的具体要求。根据RFC 6455,客户端发送到服务器的帧必须使用掩码,而服务器发送的帧不需要掩码。掩码是4字节的,应用于有效载荷数据,每个字节依次与掩码的对应字节异或,循环使用掩码。例如,第一个字节与掩码的第0个字节异或,第二个与第1个,第三个与第2个,第四个与第3个,第五个又回到第0个,依此类推。
用户提供的unmask函数看起来是正确的,因为它确实循环使用maskBytes数组中的四个字节,对data的每个字节进行异或操作。测试用例覆盖了空数据、数据长度小于4、超过4、全零掩码、全FF掩码以及一个实际案例(生成"Hello")。这些都是合理的测试点。
接下来,我需要考虑是否有其他边界情况或异常情况未被覆盖。例如:
-
掩码数组长度不等于4的情况:根据WebSocket协议,掩码必须是4字节,但函数是否对此做了处理?当前的函数假设maskBytes是4字节,如果传入的maskBytes长度不等于4,可能会导致错误。例如,如果maskBytes长度为3,i%4的结果会是0、1、2、0、1、2,这样会访问maskBytes[3],导致越界。但根据协议,这种情况不应该发生,因为客户端必须发送4字节的掩码。但函数本身是否应该添加防御性代码?用户可能希望函数在非法输入时如何处理?是否需要测试这种情况?
-
非Buffer类型的data输入:函数是否假设data是Buffer类型?如果传入的是其他类型(如Array、Uint8Array或字符串),可能会导致错误。但根据上下文,这个函数可能是在WebSocket服务器内部使用,确保data是Buffer,因此可能不需要处理其他类型。但测试中应确保传入的是Buffer。
-
性能测试:对于大数据量的处理,是否有效率问题?不过单元测试通常不涉及性能测试,除非特别要求。
-
字节顺序问题:是否有可能在掩码的应用顺序上出错?例如,是否应该按大端序或小端序处理?根据RFC,掩码是按顺序依次循环应用,所以函数中的i%4是正确的。
现在,回到用户的问题,他们可能希望确认现有的测试是否足够,或者是否有其他需要注意的地方。根据上述分析,现有的测试已经覆盖了主要情况,但可能需要补充对掩码长度不等于4的测试,尽管根据协议,这种情况不应出现。但为了代码的健壮性,可能需要添加错误处理,比如抛出异常,否则当maskBytes长度不是4时,函数会出错。例如,当maskBytes长度是3,i%4可能为3,此时maskBytes[3]不存在,导致错误。
但根据WebSocket协议,服务器在接收到客户端消息时,掩码必须是4字节,因此在正确的实现中,调用unmask函数之前,应该已经验证了maskBytes的长度为4。所以,在函数内部可能不需要处理这种情况,而是由上层调用者保证。因此,测试用例中可能不需要涵盖这种情况,或者可以添加一个测试用例来验证当maskBytes长度不为4时的行为,比如是否抛出错误。
但原函数并没有处理这种情况,因此在maskBytes长度不足4时,会抛出错误。例如,当maskBytes是空数组时,访问maskBytes[i%4]会越界。因此,可能需要在上层调用时确保maskBytes的长度正确,而不是在unmask函数内部处理。因此,测试用例是否应该包括这种情况?可能应该,但根据现有的测试用例,用户可能更关注正确路径,而异常处理可能由其他部分保证。
另外,考虑到JavaScript的灵活性,如果maskBytes的元素不是整数(比如是字符串或其他类型),异或操作可能会导致意外结果。例如,如果maskBytes中的某个元素是字符串"1",那么在进行异或时,会转换为NaN,导致结果错误。但在WebSocket协议的上下文中,maskBytes应该是4个字节的数组,每个元素是0-255的整数,因此这种情况应由上层输入验证处理,而不是在unmask函数中处理。因此,测试用例可能不需要考虑这些,除非想要增加鲁棒性测试。
总结,现有的测试用例已经覆盖了主要情况,但可能需要补充:
-
测试当maskBytes长度不为4时的行为,确保函数抛出错误或正确处理(但根据协议,这不应该发生,因此可能作为异常情况处理)。
-
确认所有测试用例中的maskBytes都是长度为4的数组,避免测试本身引入错误。
-
考虑是否覆盖更大的数据量,例如数据长度正好是4的倍数,或者非常大的数据,以验证循环逻辑的正确性。
例如,添加一个测试用例,数据长度正好是4字节,掩码正确应用:
it('处理正好4字节的数据', function() {const mask = [0x01, 0x02, 0x03, 0x04];const data = Buffer.from([0x05, 0x06, 0x07, 0x08]);const expected = Buffer.from([0x04, 0x04, 0x04, 0x0C]); // 0x01^0x05=0x04, 0x02^0x06=0x04, 0x03^0x07=0x04, 0x04^0x08=0x0Cassert.deepStrictEqual(unmask(mask, data), expected);});
或者测试数据长度为8字节,验证掩码正确循环两次:
it('处理8字节数据,两次循环掩码', function() {const mask = [0x01, 0x02, 0x03, 0x04];const data = Buffer.from([0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C]);const expected = Buffer.from([0x01 ^ 0x05, // 0x040x02 ^ 0x06, // 0x040x03 ^ 0x07, // 0x040x04 ^ 0x08, // 0x0C0x01 ^ 0x09, // 0x080x02 ^ 0x0A, // 0x080x03 ^ 0x0B, // 0x080x04 ^ 0x0C // 0x00]);assert.deepStrictEqual(unmask(mask, data), expected);});
此外,可能需要测试掩码中的某些字节为0的情况,例如掩码中间有零,但之前的测试用例已经覆盖了全零的情况,可能不需要特别测试。
另一个可能的测试点是当数据长度为0时,虽然已经有一个测试用例,但确认是否正确处理。
另外,确保在解掩后的数据与原始数据在应用掩码后是否一致。例如,如果原始数据是payload,应用掩码得到maskedData,再解掩应该得到payload。可以编写一个测试用例,随机生成数据和掩码,验证两次应用后恢复原数据:
it('解掩后应还原原始数据', function() {const mask = [0x37, 0xFA, 0x21, 0x3D];const originalData = Buffer.from('Hello World', 'utf8');// 应用掩码const maskedData = Buffer.alloc(originalData.length);for (let i = 0; i < originalData.length; i++) {maskedData[i] = originalData[i] ^ mask[i % 4];}// 解掩const unmaskedData = unmask(mask, maskedData);assert.deepStrictEqual(unmaskedData, originalData);});
这个测试用例可以验证函数是否正确地双向应用掩码,因为异或操作是可逆的。
综上所述,现有的测试用例已经很好,但可以进一步补充一些边缘情况,如正好4字节的数据、多次循环掩码的数据,以及验证双向应用的正确性。同时,考虑到WebSocket协议的要求,可能不需要测试非法掩码长度,但如果有需要,可以添加相应的测试用例来确保函数在非法输入时的行为(如抛出错误)。
//这个掩码可以改,进行掩码或解码时,这个必须要一样
let maskBytes=[0x55, 0xAA, 0x33, 0xCC];
//数据可以是任何数据或字符等
let data="hello wrold";//数据进行解码函数
let unmask=function(maskBytes,data)
{let payload=Buffer.alloc(data.length);for(let i=0;i<data.length;i++){payload[i]=maskBytes[i%4] ^ data[i];}return payload;
}//数据进行掩码函数
let masked=function(maskBytes,data)
{let d=Buffer.from(data);let dataload=Buffer.alloc(d.length);for(let i=0;i<d.length;i++){dataload[i]=d[i] ^ maskBytes[i%4];}//const maskData=Buffer.from(d.map((b,i)=>b^maskBytes[i%4]));return dataload;}
//进行掩码
let maskedData=masked(maskBytes,data);
//对maskedData进行解码
console.log(unmask(maskBytes,maskedData).toString());
相关文章:
WebSocket协议里客户端发送给服务器的数据会用4字节的掩码循环异或的分析
首先,我需要回顾WebSocket协议中对掩码处理的具体要求。根据RFC 6455,客户端发送到服务器的帧必须使用掩码,而服务器发送的帧不需要掩码。掩码是4字节的,应用于有效载荷数据,每个字节依次与掩码的对应字节异或…...
【字节青训营-9】:初探字节微服务框架 Hertz 基础使用及进阶(下)
本文目录 一、Hertz中间件Recovery二、Hertz中间件跨资源共享三、Hertz 响应四、Hertz请求五、Hertz中间件Session 一、Hertz中间件Recovery Recovery中间件是Hertz框架预置的中间件,使用server.Default()可以默认注册该中间件,为Hertz框架提供panic回复…...
新版AndroidStudio 修改 jdk版本
一、问题 之前,在安卓项目中配置JDK和Gradle的过程非常直观,只需要进入Android Studio的File菜单中的Project Structure即可进行设置,十分方便。 如下图可以在这修改JDK: 但是升级AndroidStudio之后,比如我升级到了Android Stu…...
cocos spine执行动画报错Cannot read properties of null (reading ‘data‘)
cocos v3.8.3 当想this.spine.setAnimation(0, "action1", false);播放spine动画时报错↓ 解决方法一: 在setAnimation之前调用this.spine.__preload() 解决方法二: 不要让spine或其父节点通过active显隐...
笔记:新能源汽车零部件功率级测试怎么进行?
摘要:本文旨在梳理主机厂对新能源汽车核心零部件功率级测试需求,通过试验室的主流设备仪器集成,快速实现试验方案搭建,并体现测试测量方案的时效性、便捷性优势。目标是通过提升实现设备的有效集成能力、实现多设备测试过程的有效协同、流程化测试,可快速采集、分析当前数…...
【starrocks学习】之将starrocks表同步到hive
目录 方法 1:通过HDFS导出数据 1. 将StarRocks表数据导出到HDFS 2. 在Hive中创建外部表 3. 验证数据 方法 2:使用Apache Spark同步 1. 添加StarRocks和Hive的依赖 2. 使用Spark读取StarRocks数据并写入Hive 3. 验证数据 方法 3:通过…...
Linux提权--SUDO提权
sudo 是 Linux 中常用的特权管理工具,允许普通用户以其他用户(通常是 root 用户)的身份运行命令。如果配置不当,攻击者可能通过滥用 sudo 权限来提升自己的权限。 一.常见的 sudo 提权方法: 误配置的 sudo 权限&…...
【AIGC提示词系统】基于 DeepSeek R1 + Claude 的新年运势占卜系统设计与实现
提示词在最下方 DeepSeek R1调试了整体的提示词,使用Claude进行渲染 引言 在人工智能与传统文化交融的今天,如何让 AI 充分理解并传递东方玄学文化的精髓,成为一个极具挑战性的课题。本文将详细介绍一个基于 Claude 的新年运势占卜系统的设计…...
11. Global Object 全局对象的使用
Global Object 全局对象 1 引言2 制作全局对象3 调用全局对象4 扩展使用1 引言 全局对象适用于大量重复的对象,比如阀门,电机等,如果这些设备的基本逻辑与状态都是一样的,那么就可以使用全局对象的方法来做HMI,省时省力。并且在后期修改的时候只需要修改全局对象即可。 …...
Java synchronized锁升级
偏向锁、轻量级锁和重量级锁是Java中synchronized关键字的三种锁状态,用于优化多线程环境下的性能。以下是它们的简要说明: 1. 偏向锁(Biased Locking) 目的:减少无竞争时的锁开销。适用场景:只有一个线程…...
【Hadoop】Hadoop的HDFS
这里写目录标题 HDFS概述HDFS产出背景及定义HDFS产生背景HDFS定义 HDFS优缺点HDFS优点HDFS缺点 HDFS组成架构HDFS文件块大小 HDFS的Shell操作常用命令实操准备工作上传下载HDFS直接操作 HDFS的API操作客户端环境准备HDFS的API案例实操HDFS文件上传HDFS文件下载HDFS文件更名和移…...
JAVA异步的TCP 通讯-客户端
一、客户端代码示例 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.AsynchronousSocketChannel; import java.nio.channels.CompletionHandler; import java.util.concurrent.ExecutorService; impo…...
4.回归与聚类算法 4.1线性回归
4.1.1 线性回归的原理 1 线性回归应用场景: 房价预测 销售额度预测 金融:贷款额度预测,利用线性回归以及系数分析因子 2 什么是线性回归 1) 定义:利用回归方程(函数)对一个或者多个自变量…...
联想拯救者开机进入bios
如果你的联想拯救者(Lenovo Legion)笔记本电脑开机后直接进入 BIOS 设置界面,可能是以下原因之一导致的。以下是解决方法: 1. 检查启动顺序 进入 BIOS 后,找到 Boot(启动)选项卡。检查启动顺序…...
【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(四)
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:贪心算法篇–CSDN博客 文章目录 前言例题1.合并区间2.无重叠的区间3.用最少数量的箭引爆气球…...
Junit5使用教程(3)
第三部分:JUnit 5 进阶 3. 动态测试 一、动态测试是什么? 动态测试(Dynamic Test)允许在运行时生成测试用例,而不是在编译时通过 Test 静态定义。它通过 TestFactory 注解标记的方法动态生成一组测试用例࿰…...
WPS中解除工作表密码保护(忘记密码)
1.下载vba插件 项目首页 - WPS中如何启用宏附wps.vba.exe下载说明分享:WPS中如何启用宏:附wps.vba.exe下载说明本文将详细介绍如何在WPS中启用宏功能,并提供wps.vba.exe文件的下载说明 - GitCode 并按照步骤安装 2.wps中点击搜索,输入开发…...
通向AGI之路:人工通用智能的技术演进与人类未来
文章目录 引言:当机器开始思考一、AGI的本质定义与技术演进1.1 从专用到通用:智能形态的范式转移1.2 AGI发展路线图二、突破AGI的五大技术路径2.1 神经符号整合(Neuro-Symbolic AI)2.2 世界模型架构(World Models)2.3 具身认知理论(Embodied Cognition)三、AGI安全:价…...
kamailio-osp模块
该文档详细讲解了如何在Kamailio中配置和使用OSP模块(Open Settlement Protocol Module),以实现基于ETSI标准的安全多边对等互联(Secure Multi-Lateral Peering)。以下是核心内容的总结: 1. 模块功能 OSP模…...
【Linux网络编程】:URL(encode),HTTP协议,telnet工具
🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 Linux网络编程笔记: https://mp.csdn…...
SpringMVC SpringMVC响应 一、数据处理及跳转
1. 结果跳转方式 ①.ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 <bean id"templateResolver" class"org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"><property name"p…...
C++SLT(三)——list
目录 一、list的介绍二、list的使用list的定义方式 三、list的插入和删除push_back和pop_backpush_front和pop_frontinserterase 四、list的迭代器使用五、list的元素获取六、list的大小控制七、list的操作函数sort和reversemergeremoveremove_ifuniqueassignswap 一、list的介…...
基于Coze平台实现抖音链接提取文案转小红书文案的智能体开发全流程解析
文章目录 引言:跨平台内容运营的AI解法实例最终效果1. 平台特性对比与转化需求分析1.1 用户画像与内容风格对比1.2 文案转化核心需求2. Coze平台技术架构解析2.1 Coze核心能力矩阵2.2 关键技术组件选型3. 智能体工作流设计3.1 完整处理流程3.2 关键节点说明4. 核心模块实现详解…...
32. 最长有效括号
动态规划 dp[i]表示以i下标为结尾的最长有效括号的长度,取dp[i]中的最大值即可。 i从1开始判断,只有s[i])才需要判断: 如果s[i-1](,那么dp[i]dp[i-2]2,注意判断i-2的范围否则,如果dp[i-1]>0࿰…...
Linux常见问题解决方法--2
如何反爬 后台对访问进行统计,如果单个 IP 访问超过阈值,予以封锁 后台对访问进行统计,如果单个 session 访问超过阈值,予以封锁 后台对访问进行统计,如果单个 userAgent 访问超过阈值,予以封锁 以上的组…...
STM32H7和F7 主要区别
STM32H7和F7系列是STMicroelectronics推出的高性能ARM Cortex-M微控制器系列,二者在性能、外设和用途上有显著区别。以下是它们的主要区别: 1. 内核与性能 STM32H7: 内核:Cortex-M7(单核或双核,部分型号带…...
软件测试丨PyTorch 图像目标检测
随着人工智能和机器学习的飞速发展,图像目标检测技术在各个领域扮演着越来越重要的角色。无论是在安防监控、自动驾驶车辆,还是在医疗影像分析和智能家居中,图像目标检测都发挥着不可或缺的作用。今天,我们将深入探讨其中一种热门…...
利用TensorFlow.js实现浏览器端机器学习:一个全面指南
引言 随着深度学习技术的不断发展,机器学习已从传统的服务器端运算逐渐转向了前端技术。TensorFlow.js 是 Google 推出的一个用于在浏览器中进行机器学习的开源库,它允许开发者在浏览器中直接运行机器学习模型,而无需依赖后端服务器。Tensor…...
全流程安装DeepSeek开源模型
目录 安装Ollama选择大模型安装大模型对话备注 安装Ollama 安装DeepSeek首先需要安装一个Ollama,这个软件相当于运行DeepSeek模型的底层,没有这个底层就没办法跑DeepSeek AI模型。 下载地址: https://ollama.com/点击下载windows版本&…...
VulnHub | Prime - 1
https://vulnhub.com/entry/prime-1,358/https://vulnhub.com/entry/prime-1,358/ 0x01:靶场简介 Prime 1 是 VulHub 中的一台用于 OSCP 考试练习的靶机。通过本靶机,我们可以系统的了解的渗透测试的全流程。本靶机的通关目标如下: Get The…...
实验十 Servlet(一)
实验十 Servlet(一) 【实验目的】 1.了解Servlet运行原理 2.掌握Servlet实现方式 【实验内容】 1、参考课堂例子,客户端通过login.jsp发出登录请求,请求提交到loginServlet处理。如果用户名和密码相同则视为登录成功,…...
寒假刷题Day22
一、2570. 合并两个二维数组 - 求和法 class Solution { public:vector<vector<int>> mergeArrays(vector<vector<int>>& nums1, vector<vector<int>>& nums2) {int i 0, j 0, n1 nums1.size(), n2 nums2.size();int tmp 0;…...
KES数据库实践指南:探索KES数据库的事务隔离级别
引言 前两篇文章我们详细讲解了如何安装KES金仓数据库,并提供了快速查询和搭建基于coze平台的智能体的解决方案。今天,我们的焦点将放在并发控制机制和事务隔离级别上。 本文将通过一系列实验操作,深入探讨KES数据库中的并发控制机制和事务…...
基于STM32的智能加湿器设计(新版本)
目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是加湿器。设备的详细功能见网盘中的文章《12、基于…...
Electricity Market Optimization 探索系列(三)
本文参考链接link 电网容量规划是一个寻求最优发电容量的过程,找到的最优发电容量能够可靠地满足未来电网的需求 发电机的容量和发电成本呈正相关关系,一台发电机的发电量不能超过其额定发电容量,结合我之前的博客所说的内容,可…...
JAVA进阶之线程
为神马有线程?这玩意儿在干嘛??? 回答这个问题,就先要知道一点点计算机的工作方式。 总所周知,计算机有五部分:输入输出、计算器、存储器、控制器。而在计算机内,CPU、内存、I/O之…...
浙江安吉成新照明电器有限公司分布式光伏发电项目--安科瑞Acrel-1000DP分布式光伏监控系统
安科瑞 崔丽洁 项目背景 随着可再生能源的发展,分布式光伏发电成为重要的能源利用方式。浙江安吉成新照明电器有限公司 3234.465kWp 分布式光伏发电项目应运而生。该公司是螺旋节能灯毛管专业生产企业,于 2007 年 6 月成立,具备全自动生产线、…...
pytorch实现主成分分析 (PCA):用于数据降维和特征提取
人工智能例子汇总:AI常见的算法和例子-CSDN博客 使用 PyTorch 实现主成分分析(PCA)可以通过以下步骤进行: 标准化数据:首先,需要对数据进行标准化处理,确保每个特征的均值为 0,方差…...
2025_2_4 C语言中关于free函数及悬空指针,链表的一级指针和二级指指针
1.free函数 free函数所接受的参数只能是动态分配出来的内存,,否者free的行为是未定义的同一片内存空间不能被free两次 free过后的内存可能会引发悬空指针的问题 2.悬空指针 悬空指针的问题主要是free过后的内存空间,原先指向这片空间的指…...
pytorch逻辑回归实现垃圾邮件检测
人工智能例子汇总:AI常见的算法和例子-CSDN博客 完整代码: import torch import torch.nn as nn import torch.optim as optim from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split …...
一次线程数超限导致的hive写入hbase作业失败分析
1.集群配置 操作系统:SuSe操作系统 集群节点:100台相同配置的服务器 单台:核心112Core,内存396G 2.问题现象 现象1:跑单个入库任务报错,批量提交任务后出现OOM异常 执行12个hivesql,将数据写入hbase.hbase入库有近一半的任务报错。 每次报错的任务不是同一个,hivesql…...
JAVA安全—反射机制攻击链类对象成员变量方法构造方法
前言 还是JAVA安全,哎,真的讲不完,太多啦。 今天主要是讲一下JAVA中的反射机制,因为反序列化的利用基本都是要用到这个反射机制,还有一些攻击链条的构造,也会用到,所以就讲一下。 什么是反射…...
Java集合面试总结(题目来源JavaGuide)
问题1:说说 List,Set,Map 三者的区别? 在 Java 中,List、Set 和 Map 是最常用的集合框架(Collection Framework)接口,它们的主要区别如下: 1. List(列表) 特点…...
【区块链】深入理解椭圆曲线密码学(ECC)
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 深入理解椭圆曲线密码学(ECC)1. 概述2. 椭圆曲线的数学基础2.1 基本定义2.2 有限…...
接口游标分页
由于数据库本身的的限制(以MySQL为例),以 page_num,page_size 为代表的偏移分页方式不可避免的会遇到深分页问题。 不过用户若要找符合条件的少量数据,通过翻页则十分低效,且大多用户也不会往后翻很多页,故对于C端筛选数据场景,限制分页数量增加筛选条件才是标准解决方…...
大数据数仓实战项目(离线数仓+实时数仓)2
目录 1.课程目标和课程内容介绍 2.数仓维度建模设计 3.数仓为什么要分层 4.数仓分层思想和作用 5.数仓中表的种类和同步策略 6.数仓中表字段介绍以及表关系梳理 订单表itcast_orders 订单明细表 itcast_order_goods 商品信息表 itcast_goods 店铺表 itcast_shops 商…...
C++输入输出(上)
cin和cout cin是C中提供的标准输入流对象,一般针对的是键盘,也就是从键盘上输入的字符流,使用 cin来进行数据的提取,cin一般是和 >> (流提取运算符) 配合使用的。 cin的功能和scanf是类似的 cout是C中提供的标准输出流对象,一般针对的是控制台的窗口,也就是将数据以字符…...
SpringBoot 连接Elasticsearch带账号密码认证 ES连接 加密连接
依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>配置文件 es:ip: 172.23.4.130port: 9200user: elasticpassword: qwertyuiop读取配置文件…...
选择排序
选择排序的基本思想: 每⼀次从待排序的数据元素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始位置,直到全部待 排序的数据元素排完。 直接选择排序 1. 在元素集合 array[i]--array[n-1] 中选择关键码最⼤(⼩)的数据…...
Linux——进程概念
目录 一、系统调用和库函数概念二、基本概念三、描述进程-PCB3.1 task_struct-PCB的一种3.2 task_ struct内容分类 四、组织进程五、查看进程六、通过系统调用获取进程标示符七、通过系统调用创建进程- fork初始7.1 fork函数创建子进程7.2 fork 之后通常要用 if 进行分流 八、进…...