第九周预习报告

文章目录

  • 密码系统设计
    • 第九周预习报告
      • 学习内容
      • AI 对学习内容的总结(1分)
        • 要求
        • 总结
      • 对 AI 总结的反思与补充(2分)
        • 反思与补充
      • 补充内容
      • 反思
      • 学习思维导图(2分)
        • 要求
        • 思维导图
        • 代码
        • 导图
      • 基于 AI 的学习(2分)
        • 要求
        • 学习内容
      • 学习实践过程遇到的问题与解决方式(AI 驱动,优先使用AI工具解决问题)(2分)
      • 作业提交要求(1分)
      • 参考资料

密码系统设计

第九周预习报告

学习内容

  • Head First C 嗨翻 C 语言 第9章
  • 课程 mindmap

AI 对学习内容的总结(1分)

要求
  • 让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材
总结

这份文件是关于如何在C语言程序中使用系统调用来创建和管理进程的教程。以下是对文件内容的总结:

  1. 系统调用(System Calls)

    • 系统调用是C程序与操作系统内核通信的方式,用于访问硬件资源。
    • 标准库中的大多数函数都依赖于系统调用。
    • system()函数是一个简单的系统调用,它接受一个字符串参数并在命令行中执行,类似于在命令行中输入命令。
  2. 使用system()函数

    • system()可以用来快速原型开发,避免编写大量C代码。
    • 但是,system()函数存在安全隐患,因为它会执行任何传入的命令,可能会导致安全漏洞。
  3. exec()函数族

    • exec()函数提供了比system()更多的控制,它们可以精确地告诉操作系统要运行的程序。
    • exec()函数会替换当前进程,而不是创建一个新进程。
    • 有多种exec()函数,包括execl(), execlp(), execle(), execv(), execvp(), execve(),它们的区别在于参数的形式和是否搜索PATH环境变量。
  4. 环境变量

    • 每个进程都有一组环境变量,可以通过getenv()函数读取。
    • 使用execle()时,可以传递一个环境变量数组。
  5. 错误处理

    • 大多数系统调用失败时会遵循一套规则,包括设置全局变量errno并返回-1。
    • strerror()函数可以将错误代码转换为可读的错误消息。
  6. fork()系统调用

    • fork()创建当前进程的一个副本,称为子进程。
    • 原始进程称为父进程,新创建的副本称为子进程。
    • fork()之后,父进程和子进程将拥有不同的进程标识符(PID)。
  7. 结合fork()exec()使用

    • 通过在子进程中调用exec(),可以让父进程继续执行其他任务,而子进程则运行新的程序。
    • 这种方法可以同时运行多个进程,提高程序性能。
  8. CreateProcess()

    • 在Windows系统中,没有fork()系统调用,但可以使用CreateProcess()函数,它类似于增强版的system()
  9. 多进程输出

    • 操作系统确保每个进程的输出不会混淆。

这份文件通过示例代码和解释,教授了如何在C语言程序中使用系统调用来创建和管理进程,以及如何利用fork()exec()函数来提高程序的并发性和性能。同时,也强调了在使用这些系统调用时需要注意的安全和错误处理问题。

对 AI 总结的反思与补充(2分)

反思与补充

补充内容

  1. system()函数示例补充
    • 在介绍system()函数时,文中给出了多个示例,如system("dir D:")(在Windows系统中打印D盘内容)、system("gedit")(在Linux系统中启动编辑器)、system("say 'End of line'")(在Mac系统中朗读文本),这些示例直观地展示了system()函数在不同操作系统下执行不同命令的功能,进一步强调了其便利性和跨平台性,但同时也暗示了其潜在风险,因为它直接执行输入的命令字符串,若字符串被恶意构造,可能会引发安全问题。
    • 文中通过guard_log程序详细说明了system()函数的使用场景,它将用户输入的评论与时间戳组合成命令字符串,然后使用system()函数调用echo命令将其添加到日志文件中。这个示例不仅展示了如何在实际程序中运用system()函数处理文件操作,还引出了后续关于system()函数安全性和局限性的讨论,即如果用户输入恶意命令,可能会导致系统执行任意代码。
  2. exec()函数族详细说明
    • 对于exec()函数族的介绍非常全面,详细阐述了列表函数(execl()execlp()execle())和数组函数(execv()execvp()execve())的参数形式和区别。例如,列表函数接受命令行参数作为参数列表,且最后一个参数必须为NULL,以表示参数结束;而数组函数则适用于命令行参数已存储在数组中的情况。同时,指出execlp()execvp()会在PATH环境变量中搜索程序,这为在不同环境下灵活运行程序提供了便利。
    • 通过diner_info程序示例,清晰地展示了execle()函数如何设置命令行参数和环境变量,并替换当前进程执行新程序。在这个示例中,创建了一个包含特定环境变量(JUICE=peach and apple)的数组,并将其传递给execle()函数,同时指定了要执行的程序(diner_info)及其参数,生动地体现了exec()函数族在控制程序执行环境和参数方面的强大功能。
  3. 错误处理机制深入
    • 在错误处理部分,以execle()函数调用为例,深入解释了如何判断系统调用是否失败。如果exec()函数调用成功,当前程序将停止运行,因此若在调用exec()函数后还有代码执行,则说明调用出现问题。这种判断方式简单而直接,为程序员在实际编程中检测exec()函数调用的正确性提供了明确的方法。
    • 文中详细介绍了errno变量和strerror()函数的用法。errno是一个全局变量,定义在errno.h头文件中,包含了一系列标准错误值,如EPERM(操作不被允许)、ENOENT(文件或目录不存在)等。strerror()函数则用于将errno中的错误代码转换为可读的错误消息,方便程序员在程序中输出错误信息,以便调试和排查问题。例如,当系统找不到要运行的程序并设置errnoENOENT时,strerror(errno)将返回No such file or directory,使错误原因一目了然。
  4. fork()系统调用与进程关系
    • fork()系统调用的解释深入到进程层面,详细说明了它如何创建当前进程的副本,包括副本与原始进程在代码执行位置、变量值等方面的一致性,以及唯一的区别——进程标识符(PID)。这种详细的解释有助于理解进程复制的本质,以及后续如何利用fork()创建子进程来实现并发执行。
    • 通过newshound程序的逐步改进过程,生动地展示了fork()exec()函数结合使用的实际效果。首先,分析了原始newshound程序中仅使用execle()函数导致只能运行一次rssgossip.py脚本的问题,原因是exec()函数会替换当前进程,使得程序在第一次调用execle()后就终止。然后,引入fork()函数,详细描述了如何通过fork()创建子进程,在子进程中调用exec()函数来运行rssgossip.py脚本,而父进程则可以继续循环处理其他RSS源,从而实现同时运行多个进程,提高程序性能,这个过程清晰地展示了fork()+exec()模式在实际多进程编程中的应用场景和优势。

反思

  1. 安全性强调的重要性:文中多次强调了系统调用在安全性方面的问题,如system()函数可能被注入恶意命令导致安全漏洞,这是非常关键的一点。在实际编程中,安全问题往往容易被忽视,但可能引发严重后果。程序员在使用系统调用时,应始终保持警惕,对用户输入进行严格验证和过滤,避免因不当使用系统调用而导致安全风险。例如,在处理用户输入作为命令执行时,要确保输入的合法性和安全性,防止恶意代码注入。
  2. 多种系统调用的选择与权衡:文件详细介绍了system()exec()fork()等多种系统调用,它们各有优缺点和适用场景。在实际编程中,需要根据具体需求进行选择和权衡。例如,system()函数简单易用但控制有限且存在安全隐患,适用于简单的命令执行场景;exec()函数提供了更精确的控制,但使用相对复杂;fork()函数则用于创建进程副本,结合exec()函数可实现多进程并发执行,适用于需要提高程序性能和并行处理任务的情况。程序员应深入理解这些系统调用的特性,根据实际情况合理运用,以达到最佳的程序效果。
  3. 跨平台编程的考虑:文中提及了不同操作系统下系统调用的差异,如system()函数在不同系统中执行不同命令,fork()函数在Windows系统中不被原生支持(需通过Cygwin等工具实现)。在跨平台编程时,这是一个重要的考虑因素。程序员需要了解目标平台的特性,选择合适的系统调用或采取兼容性措施,确保程序在不同操作系统上能够正确运行。例如,在编写跨平台程序时,可能需要针对不同操作系统使用条件编译指令来选择合适的代码路径,以实现系统调用的正确使用。
  4. 错误处理的全面性:对于系统调用的错误处理机制,文件进行了详细介绍,包括errno变量和strerror()函数的使用。在实际编程中,完善的错误处理是保证程序健壮性的关键。程序员不仅要能够检测到系统调用的失败,还应准确获取错误信息,以便及时采取相应措施,如向用户输出错误提示、记录日志或进行错误恢复操作。忽视错误处理可能导致程序在遇到问题时崩溃或出现不可预期的行为,因此应养成良好的错误处理习惯,全面考虑各种可能的错误情况并进行妥善处理。

学习思维导图(2分)

要求
  • Mermaid 代码与截图(参考Mermaid MindMap语法)或者提交思维导图链接(如果使用线上编辑器,推荐processon,xmind,…)
思维导图
代码
mindmaproot((第九周预习报告系统调用与进程管理 ))系统调用system函数执行命令字符串安全性和灵活性问题系统调用依赖操作系统进程控制exec函数族execl、execlp、execleexecv、execvp、execve进程替换当前进程替换为新程序错误处理errno变量全局错误值strerror函数错误代码转换为消息环境变量环境变量的使用getenv读取环境变量execle传递环境变量fork函数与exec函数组合使用fork创建子进程父进程与子进程exec在子进程中运行新程序子进程替换为新程序父进程继续执行::icon(fa fa-book)
导图

在这里插入图片描述

基于 AI 的学习(2分)

要求
  • 至少找到自己理解不是太好 2 个概念,让 AI 对自己进行苏格拉底提问
  • 参考下面提示语或者使用 AI Agent

提示词:“我在学习XXX知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”

  1. 核心是要求AI工具:“请你以苏格拉底的方式对我进行提问”
  2. 然后AI工具就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
  3. 如果你觉得差不多了,可以先问问AI工具:“针对我XXX知识点,我理解了吗?”
  4. AI工具会给出它的判断,如果你也觉得自己想清楚了,可以最后问AI工具:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
学习内容
  • system()函数
  • 错误处理

学习实践过程遇到的问题与解决方式(AI 驱动,优先使用AI工具解决问题)(2分)

  • 问题 1未检查系统调用的返回值导致的错误
    情景描述:
    在编写程序时,可能会直接调用系统函数(如read(), write(), malloc()等)而忽略了对这些函数返回值的检查。如果这些函数调用失败,它们通常会返回特定的错误码,如果没有检查这些返回值,程序可能会继续执行错误的逻辑,导致不可预测的行为或程序崩溃。

解决方式:

检查返回值:每次调用系统函数后,应立即检查其返回值。如果返回值表明错误,应执行错误处理代码。
使用宏定义:在代码中定义宏,如CHECK_ERR,用于检查函数调用的返回值,并在发现错误时执行错误处理逻辑。
日志记录:记录关键系统调用的错误信息,以便于调试和追踪问题来源。

  • 问题 2对错误信息的处理不当导致用户体验差
    情景描述:
    在错误发生时,如果程序只是简单地打印出错误码或技术性的错误信息,对于普通用户来说可能难以理解。这不仅影响了用户体验,还可能导致用户在遇到问题时不知道如何操作。

解决方式:

用户友好的错误信息:为错误情况提供清晰、简洁、用户友好的错误信息。避免直接显示技术性的错误码或复杂的错误信息。
错误日志记录:在后台记录详细的错误信息,包括错误码和堆栈跟踪,以便于开发人员分析和调试。
错误恢复建议:在可能的情况下,提供错误恢复的建议或操作步骤,帮助用户解决问题。

作业提交要求(1分)

  1. 提交Markdown 文件,文档命名“学号姓名《密码系统设计》.md”
  2. 提交Markdown 文件转为 PDF,文档命名“学号姓名《密码系统设计》第 X 周.pdf”
  3. 提交代码托管链接(可选):学号姓名 gitee(github) 链接
  4. 内容质量高有加分

参考资料

  • AI工具(你使用的AI工具及其链接)
    • Kimi
    • 秘塔搜索
  • 图书
    • 《Windows C/C++加密解密实战》
  • 网站
    • gmssl官网
    • openssl

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

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

相关文章

GB/T 43206—2023信息安全技术信息系统密码应用测评要求(五)

文章目录 附录AA.1 概述A.2 密钥产生A.3 密钥分发A.4 密钥存储A.5 密钥使用A.6 密钥更新A.7 密钥归档A. 8 密钥撤销A.9 密钥备份A.10 密钥恢复A.11 密钥销毁 附录B附录C 附录A A.1 概述 密钥管理对于保证密钥全生存周期的安全性至关重要 ,可以保证密钥(除公开密钥外) 不被非授…

phpstudy 使用php8.2.9版本报错问题

phpstudy 使用php8.2.9版本报错问题 1、如果php8的扩展控制面板开启无效的话,可以手动开启试试 2、php有报错日志: Fatal error: Directive ‘track_errors’ is no longer available in PHP in Unknown on line 0 在切换php版本到更高版本时在终端查…

【科普小白】LLM大语言模型的基本原理

一、要了解LLM大模型的基本原理就要先来了解一下自然语言处理(NLP)。 NLP 是 AI 的一个子领域,专注于使计算机能够处理、解释和生成人类语言,主要任务包括:文本分类、自动翻译、问题回答、生成文本等。到底是NLP促生了…

初识网络编程TCP/IP

目录 前言相关名词解释应用层协议——HTTP传输层协议socketTCP帧头格式三次握手、四次挥手 UDPTCP的socket实现 参考博文 前言 刚碰到网络编程,会出现一堆协议、概念、这层次那技术的,头都大了,还是得总结总结…… 相关名词解释 ✨✨网络…

整合本地市场机会 同城小程序打造社区商圈

同城市场中,商家与消费者之间的互动和交易模式正在发生深刻变化,同城小程序成为了企业、商户和消费者之间连接的桥梁,成为打造社区商圈、整合本地市场机会的重要工具。今天小编分享,同城小程序怎么一个软件整合以前十几个APP做的事…

安当ASP系统:适合中小企业的轻量级Radius认证服务器

安当ASP(Authentication Service Platform)身份认证系统是一款功能强大的身份认证服务平台,特别适用于中小企业。其中,简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍: 一、主要…

(一)<江科大STM32>——软件环境搭建+新建工程步骤

一、软件环境搭建 (1)安装 Keil5 MDK 文件路径:江科大stm32入门教程资料/Keil5 MDK/MDK524a.EXE,安装即可,路径不能有中文。 (2)安装器件支持包 文件路径:江科大stm32入门教程资料…

面试经典 150 题:121,125

121. 买卖股票的最佳时机 【参考代码】 动态规划解决 class Solution { public:int maxProfit(vector<int>& prices) {int size prices.size();int min_price 99999, max_profit 0;for(int i0; i<size; i){if(prices[i] < min_price){min_price prices[i…

Spring boot 读模块项目升级为spring cloud 项目步骤以及问题

1.结构说明 bean 模块 &#xff0c;public 模块&#xff0c; client 模块&#xff0c; erp模块&#xff0c;system 主模块。 2.环境说明以及pom 原本环境 新环境 mysql 5.7 -------------- mysql 8.0 maven 3.9.6 jdk 8 -----------…

Linux系统-初始化

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 这是Linux进阶部分的最后一大章。讲完这一章以后&#xff0c;我们Linux进阶部分讲完以后&#xff0c;我们的Linux操作部分就…

element-plus的Tree 树形控件添加图标

该文章为本菜鸡学习记录&#xff0c;如有错误还请大佬指教 本人刚开始接触vue框架&#xff0c;在使用element-plus组件想实现树形控件&#xff0c;发现官网的组件示例没有图标区分显示 实现效果 代码 <temple 部分 <el-tree :data"data" node-click"hand…

【详细 工程向】基于Smart3D的五镜头相机三维重建

数据部分&#xff1a; 数据要求 &#xff08;1&#xff09;每条行带至少从 3 个不同的视角进行拍摄。 &#xff08;2&#xff09;相邻相片之间的重叠度通常要求大于三分之二。 &#xff08;3&#xff09;不同拍摄视角之间夹角应该少于 15 度。 &#xff08;4&#xff09;通…

pdf转excel;pdf中表格提取

一、问题描述 在工作中或多或少会遇到&#xff1a;需要将某份pdf中的表格数据提取出来&#xff0c;以便能够“修改使用”数据 可将pdf中的表格提取出来&#xff0c;解决办法还有点复杂 尤其涉及“pdf中表格不是标准的单元格”的时候&#xff0c;提取数据到excel不太容易 比…

mean_x2 = (x**2).mean(dim=dims, keepdims=True)

这行代码的作用是计算输入张量 x 在指定维度上的平方均值&#xff0c;并保持原始维度的形状。具体来说&#xff1a; mean_x2 (x**2).mean(dimdims, keepdimsTrue) # [b,1,1] 参数解释 x**2&#xff1a;对输入张量 x 的每个元素进行平方运算。.mean(dimdims, keepdimsTrue)…

Enscape 4.2 安装教程(支持资源库)

软件介绍 Enscape 是专门为建筑、规划、景观及室内设计师打造的渲染产品&#xff0c;无需导入导出文件&#xff0c;在常用的软件内部即可看到逼真的渲染效果。 你无需了解记忆各种参数的用法&#xff0c;一切都是傻瓜式的一键渲染&#xff0c;你可以把精力更多地投入到设计中…

DBeaver工具连接Hive

DBeaver工具连接Hive 首先解压安装包dbeaver-ce-latest-x86_64-setup.zip,并安装dbeaver-ce-latest-x86_64-setup.exe; 安装Kerberos客户端4.1-amd64.msi; 查看集群节点/etc/hosts文件内容,并追加到C:\Windows\System32\drivers\etc\hosts; 下载集群用户keytab文件,并解压…

4.4 软件设计:UML顺序图

UML顺序图 1、 UML2、 UML顺序图2.1 顺序图组成对象生命线消息 2.2 顺序图和用例登录用例 2.3 顺序图建模顺序图建模参考策略建立顺序图的步骤建立顺序图的示例 3、面对对象的设计原则3.1 特点3.2 层次3.3 注意点类设计需要强内聚&#xff0c;弱耦合可重用性框架 1、 UML 统一…

云计算:定义、类型及对企业的影响

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 云计算&#xff1a;定义、类型及对企业的影响 云计算&#xff1a;定义、类型及对企业的影响 云计算&#xff1a;定义、类型及对企…

【FPGA开发】AXI-Lite总线协议解读、Verilog逻辑开发与仿真、Alex Forencich代码解读

目录 AXI是什么AXI是如何工作的AXI-Lite定义AXI-Lite的关键特性AXI-Lite信号列表AXI-Lite信号时序时钟和复位握手机制写请求通道&#xff08;AW&#xff09;写数据通道&#xff08;W&#xff09;写响应通道&#xff08;B&#xff09;读请求通道&#xff08;AR&#xff09;读数据…

场地预约系统(源码+文档+部署+讲解)

本文将深入解析“场地预约系统”的项目&#xff0c;探究其架构、功能以及技术栈&#xff0c;并分享获取完整源码的途径。 系统概述 本项目名称为场地预约系统&#xff0c;是一款方便用户进行场地预约的系统。该系统主要包括用户管理、分类管理、活动管理、场地管理、提现管理…