首页 > 其他分享 >CSC209 系统故障 管道

CSC209 系统故障 管道

时间:2024-03-19 18:33:06浏览次数:25  
标签:文件 5.2 shell 变量 CSC209 管道 系统故障 使用 VAR

CSCSHELL截止时间为周日晚上11:59。积分2002月14日后12点开始发售。A3–CSCSHELLCSC209 2024年冬季上次更新(3月15日):见5.7目录1.简介2.入门文件2.1. 实际开始3.CSCSHELL4.限制(shell的东西你不必实现)5.实施和要求5.1. 管理错误5.2. 外壳变量5.2.1. 创造5.2.2. 用法5.2.3. 路径5.2.4. 使用变量赋值进行错误检查5.3. 脚本和.cscsh_init5.4. 处决5.4.1. cd命令5.5. 文件重定向5.6. 管道5.7. 注释和澄清(请查看此处了解任何更新)6.标记1.简介在最初的几堂课中,我们一起学习了命令行的基本“语法”。我们聊了一会儿关于终端程序,以及这个叫做BASH的东西,或者更一般地说是shell。在本次作业中,您将实现一个基本的shell,该shell可以执行我们在到目前为止的课程(令我惊讶的是,手册页和vi也得到了支持,至少在teach.cs和我的自己的机器)。它将能够使用系统启动可执行文件(具有适当权限的文件)在特殊$PATH变量中列出的任何目录以及具有绝对或相对路径的任何目录中找到CSCSHELL2/11(例如,如果您键入./hello)当然,您还可以为这些提供命令行参数程序。这个shell将是交互式的,并且可以适度地编写脚本。当“交互式”时,键入终端程序(本身运行您的shell程序)将向其他正在运行的stdin提供输入可执行文件,以及显示stdout和stderr的输出。真的,你已经习惯了“命令行”,但由您编写!最终,它将支持文件重定向、管道和读取来自脚本文件的命令,因此您不局限于此shell的交互式使用。虽然我们无法完全支持任何和所有程序代 写CSC209,也就是说,安装在teach.cs上(这需要持续的维护和错误修复),我们将能够使用基本系统我们已经学会使用的程序,比如cd(实际上是一种特殊情况)、ls、mkdir、rm、grep、touch、man,cat、wc等——以及您为该课程开发的所有程序。此分配将具有大量的C字符串解析、文件i/o以及系统调用的标准用法(族):fork、exec、wait、pipe和dup。2.入门文件头文件cscshell.h有很多详细信息可以帮助您入门。请不要删除或编辑任何已经存在的内容,但可以随意添加更多的函数声明、宏和任何库不需要链接,可以在teach.cs上找到。不要更改结构定义,测试人员将使用这些定义,所以您只能使用它们。除了cscshell.h,还有附带的cscshell.c,它具有main()入口点为您的程序。不需要更改此源文件。如果您这样做,您只能添加功能,并且不删除任何现有功能(此外,我们不会测试任何其他功能您添加的功能)。parse.c和run.c文件是这个赋值的两个主要部分。您实现的每一项功能应该添加到这两个文件中的一个,这取决于它是用于解析shell文本,还是用于运行进程/其他可执行文件。2.1. 实际开始本作业的系统调用方面所需的材料将不会在课堂上介绍,直到第7周和第8周,所以尽快开始解析shell语法(因为您已经你需要的一切),并开始问自己,你需要什么才能完成剩下的工作。源文件包括许多附加信息,旨在引导您成功完成任务,以及一些助手和部分完成的功能。请随意开始根据cscshell的说法,如果你是那种人的话。3.CSCSHELLCSCSHELL3/11这个shell将类似于POSIX sh(https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html)(很像BASH(https://www.gnu.org/software/bash/) ; 你可以在teach.cs机器、Ubunseu或WSL上找到;或zsh(https://wiki.archlinux.org/title/zsh#:~:text=Zsh is a power shell,改进 ab comple; 你可以在你的苹果产品上找到)。然而,我们将保持它的深度简化,重点关注以下功能:1.注释:任何一行后面跟着#字符的内容都是注释,因此被忽略2.变量分配和使用。见5.2。3.脚本执行,包括一个强制性的init脚本,该脚本最初必须在某个点4.cd命令,因为这不是可执行文件,它是由shell提供的系统控制访问5.使用系统调用启动具有任意字符串参数的可执行文件。程序是的第一部分CSCSHELL的任何可用行(前提是它不是cd、变量赋值或注释),并且可以在${PATH}目录中找到的名称,或者程序的明确路径(相对或绝对均可接受)。6.文件从stdout重定向到新的(或重新创建现有的)文件或附加到现有文件,如以及从文件重定向到stdin7.一个程序的标准输出和下一个程序标准输入之间的管道连接。所有进程都必须运行同时4.限制(shell的东西你不必实现)即使是最基本的POSIX sh(https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html)支持更多的功能,事实上,它是一种相当全面的脚本语言。我们不会实现除了3中列出的功能之外的任何功能。一些明显的局限性:1.不支持元字符/匹配,例如“*”2.循环、条件语句、通用编程脚本功能3.脚本的命令行参数(如果没有2,则有些毫无意义。)4.重定向到/带有文件描述符编号(通过shell语法)5.命令历史记录和选项卡完成此外,只有一个环境变量($PATH)是相当有限的,因此维护变量作为链表。如果你真的很喜欢这项工作,我建议用一些如果你想锻炼的话,这些缺失的功能。5.实施和要求5.1. 管理错误CSCSHELL4/11由系统故障引起的错误,例如malloc内存不足,应该会导致shell终止然而,与CSCSHELL的使用有关的错误应该得到妥善处理结束shell时,这些应该只打印一条错误消息。标题cscshell.h列出了各种当出现问题时,要打印到stderr的带有(格式化)字符串的宏。您可以在中找到示例关于如何使用它们,特别是使用ERR_PRINT。如果您无法决定使用哪个错误,使用通用错误:#define ERR_EXECUTE_LINE“无法执行行。\n”更新:您可以使用ERR_PRINT宏中的任何错误消息来通过自动测试。对于使用哪条消息,不必有任何混淆。请注意,好的信息会对您有所帮助调试。5.2. 外壳变量5.2.1. 创造外壳变量必须指定为名称,仅由字母字符和组成_(下划线)字符。变量值是一个可以包含任何ASCII字符的字符串。请注意,行的换行符不是变量值的一部分。单个=必须将变量名和值分隔开,名称之间不能有空格和变量值中可以有空格,该值也可以为空(无,或只是'=''后面的空白)。这意味着您可能还会发现额外的空白,包括“\t”(当使用fgets读取输入时,'\n'和'\r'会变得混乱,所以我们会放松这一点,而不必担心)。不需要从值中删除此空白。一些极端但正确的变量作业可能如下所示:PATH=某些文本,其中肯定包含空格。OTHER_VAR=示例具有特殊(选项卡)空白。EMPTY_VAR_ONE=EMPTY_VAR_TWO=注意:EMPTY_VAR_TWO实际上有一些空格作为值,EMPTY_VARS_ONE没有,突出显示使用光标填充空白,以便更清楚地查看。以下是一些不正确分配的示例:BAD_VAR2=名称中有一个数字Badvar=等号之前不应该有空格。这是非常错误的,希望原因很清楚!注意:引用将被简单地假设为字符串的一部分,希望能让您的工作更轻松。因此,在本例中:OTHR_VAR=“你好世界”CSCSHELL5/11变量的名称是OTHR_VAR,它的值包括引号,存储:“helloworld”(13字符–以及作为C字符串的空终止符)。最后,请注意,如果您键入文字转义序列“\t”或“\n”,则它们被解释为两个字符,但由于我们在这个shell中不使用TAB进行自动完成,因此使用TAB键将为您提供“\t”字符,形式是插入一个大空格(和C字符值“\t”)。返回参考OTHR_VAR以上。5.2.2. 用法澄清(2004年3月):在本分配中,变量只能用于命令,如中所示,在创建过程中不考虑使用(不需要支持$VAR=使用一些$OTHER值,如果您愿意,您可以支持它)。1.简单shell中的变量用法包括在变量名称之前加前缀的$。如:SPECIAL_FILE=/etc/passwordecho“文件:$SPECIAL_file并不真正存在。”注意:如果您想将变量与有效变量的符号组合在一起,这是不明确的字符。由于空间的原因,变量的末尾很清楚,但请考虑:PROJECT_DIR=a3/解决方案/

标签:文件,5.2,shell,变量,CSC209,管道,系统故障,使用,VAR
From: https://www.cnblogs.com/kantong/p/18083683

相关文章

  • RISC-V CPU管道模拟
    RISC-VCPU管道模拟1.简介RISC-V是源自伯克利的开源架构和指令集标准。该项目要求您基于标准的五阶段管道实现RISC-VCPU管道模拟器。您需要从RISC-V规范2.2中指定的RV32I指令设置中实现指令的子集。实施完整的CPU模拟器可以有效地行使系统编程功能,并加深对与建筑有关的知识......
  • 管道挖掘新篇章:切面可视化技术的智慧应用
    在城市化进程不断加速的今天,地下管道作为城市“生命线”的重要组成部分,其安全、高效运行显得尤为关键。然而,传统的管道挖掘与检测方式往往存在着诸多不足,如效率低下、安全隐患大等。如今,随着技术的飞速发展,可视化技术为我们打开了一扇透视地下世界的智慧之窗。 管道挖掘切面可......
  • 2024/3/11打卡管道(14届蓝桥杯省赛)——二分+区间合并
    目录题目思路代码题目有一根长度为 len的横向的管道,该管道按照单位长度分为 len 段,每一段的中央有一个可开关的阀门和一个检测水流的传感器。一开始管道是空的,位于 Li 的阀门会在  时刻打开,并不断让水流入管道。对于位于  的阀门,它流入的水在 时刻会使得......
  • golang,再也不用管道了,exec.Command("bash", "-c", "ps -elf | grep xxx")
    摘自:https://www.jb51.net/article/249001.htmfuncSystem_CmdCombinedOutput(cmd_linestring)([]byte,error){mutex_exec.Lock()defermutex_exec.Unlock()//old_handler:=C.set_SIGCHLD_DFL()//自己实现,用c语言保存当前的信号屏蔽字//def......
  • 12_redis管道
    redis管道redis是一个基于客户-服务器模式以及请求/相响应协议的TCP服务。一个请求会遵循以下步骤:客户端向服务器发送命令分为四步(发送命令->命令排队->命令执行->返回结果),并监听socket返回,通常以阻塞的模式等待服务端响应。服务端处理完命令,并将结果返回给客户端。如果需要......
  • 进程通信-管道
    进程通信-管道//让进程间相互影响,相互收发信息(全局变量不行)//父子进程可以,两个不同程序的进程也可以相关概念管道:无名管道/有名管道//名指路径名//有没有使用文件管道文件fifo单工,双工,半双工(收发一时其一)无名管道特点:固定读写段,fd[0]读/fd[1]写,读端只能......
  • .Net Core(七) 管道和中间件
    简介管道.NETCore中的管道是一个用于处理HTTP请求的组件。它是ASP.NETCore应用程序的核心部分,负责将传入的HTTP请求传递给适当的处理程序并生成响应。管道由一系列中间件组成,每个中间件都可以对请求或响应进行操作,然后将其传递给下一个中间件或终止请求处理。中间件......
  • c#之asp.net的管道处理模式pipeline
    管道在进入管道之前首先要知道asp.netisApi所有的请求是由IIS转发给asp.netisApiHttpWorkerRequest监听asp.netisApi中的队列,HttpWorkerRequest是管道的执行入口 注册中间件的过程在响应请求的时候会触发事件,需要Config中配置以下是HtttpAplacation中的部分事件,在请求进......
  • R 语言中管道符号%in%
     001、简单用法>a<-c(1,2,7,8)##定义向量a>b<-c(2,3,7,9)##定义向量b>a%in%b##判断向量a中元素是否在向量b中,返回逻辑向量[1]FALSETRUETRUEFALSE 002、取两个向量的交集>a<-c(1,2,7,......
  • 管道组成件中英对照
    管道组成件中英对照管道组成件Pipingcomponent1.1管子Pipe管子(按照配管标准规格制造的)pipe管子(不按配管标准规格制造的其他用管)tube钢管steelpipe铸铁管castironpipe衬里管linedpipe复合管cladpipe碳钢管carbonsteelpipe合金钢管alloysteelpip......