已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验报告实验一 进程控制与描述一、实验目的通过对windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解windows 2000的结构。通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows 2000中进程的“一生”。二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional、visual c+ 6.0企业版。三、实验内容和步骤第一部分(共三个程序):windows 2000 professional下的gui应用程序,使用visual c+编译器创建一个gui应用程序,代码中包括了winmain()方法,该方法gui类型的应用程序的标准入口点。 程序1-1 # include # pragma comment(lib, “user32.lib” ) int apientry winmain(hinstance/* hinstance */ , hinstance/* hprevinstance */, lpstr/* lpcmdline */, int/* ncmdshow */ ) : messagebox( null, “hello, windows 2000” , “greetings”, mb_ok) ; return(0) ; 实验结果然后改变参数,运行结果如下:1-2显示了当前进程的优先级:1-3进一步 显示 进程的 具体情况 :第二部分:进程的“一生”(共三个程序)1、 创建进程本程序展示的是一个简单的使用createprocess() api函数的例子。首先形成简单的命令行,提供当前的exe文件的指定文件名和代表生成克隆进程的号码。大多数参数都可取缺省值,但是创建标志参数使用了: bool bcreateok标志,指示新进程分配它自己的控制台,这使得运行示例程序时,在任务栏上产生许多活动标记。然后该克隆进程的创建方法关闭传递过来的句柄并返回main() 函数。在关闭程序之前,每一进程的执行主线程暂停一下,以便让用户看到其中的至少一个窗口。createprocess() 函数有_10_个核心参数?本实验程序中设置的各个参数的值是: createprocess( lpcwstr lpszimagename, /指向可执行的模块的指针 lpcwstr lpszcmdline, /指向可执行命令行字符串的指针 lpsecurity_attributes lpsaprocess, /ce 不支持 lpsecurity_attributes lpsathread, /ce 不支持 bool finherithandles, /ce 不支持 dword fdwcreate, /创建标志 lpvoid lpvenvironment, /ce 不支持 lpwstr lpszcurdir, /ce 不支持 lpstartupinfow lpsistartinfo, /ce 不支持 lpprocess_information lppiprocinfo /指向进程信息结构体的指针 ); 相应设置值: szfilename, szcmdline, null, null, false, create_new_console, null, null, &si, &pi相关资料 createprocess api函数来创建相应的进程,该函数的原型如下: createprocess( lpcwstr lpszimagename, /指向可执行的模块的指针 lpcwstr lpszcmdline, /指向可执行命令行字符串的指针 lpsecurity_attributes lpsaprocess, /ce 不支持 lpsecurity_attributes lpsathread, /ce 不支持 bool finherithandles, /ce 不支持 dword fdwcreate, /创建标志 lpvoid lpvenvironment, /ce 不支持 lpwstr lpszcurdir, /ce 不支持 lpstartupinfow lpsistartinfo, /ce 不支持 lpprocess_information lppiprocinfo /指向进程信息结构体的指针 ); 该函数最重要的两个参数是lpszimagename和lpszcmdline,下面的几个应用也主要是通过设置这两个参数来达到目的。(以下的程序在pocket pc 2003 se上通过测试)1、打开指定的url tchar szappname_max_path = text(iexplore.exe);/ie浏览器程序 tchar szcmdline_max_path = text(); createprocess(szappname,szcmdline, null, null,false, 0, null, null, null, null);2、打开指定的文件夹 tchar szappname_max_path = text(fexplore.exe);/资源管理器程序 tchar szcmdline_max_path = text(windows); createprocess(szappname,szcmdline, null, null,false, 0, null, null, null, null);3、打开帮助文件 process_information pi; tchar szappname_max_path = text(peghelp.exe);/系统帮助程序,pc上是在c:windows目下的winhlp32.exe tchar szcmdline_max_path = text(myhelp.html);/自己制作的帮助文档,甚至是系/统原有的帮助文件,如wince.htm、bluetooth.htm等等。myhelp.html应该放在windows目录下 createprocess(szappname,szcmdline, null, null,false, 0, null, null, null, &pi);通过以上的方式,可以在自己的应用程序里打开相应的帮助文件。 从以上的3种应用可以看出,只要知道系统自带的应用程序名,就可以通过设定szappname和szcmdline相应的值,来调用相应的程序,来达到自己想要的目的。只要认真挖掘,一定可以发现更多的应用。 2、 正在运行的进程使用进程和操作系统的版本信息分析程序,写出运行结果:当前pid信息: 3092当前操作系统版本: 00系统提示信息: task manager should now indicate this process is high priority.程序向读者表明了如何获得当前的pid和所需的进程版本信息。为了运行这一程序,系统处理了所有的版本不兼容问题。接着,程序演示了如何使用getversionex() api函数来提取osversioninfoex结构。这一数据块中包括了操作系统的版本信息。其中,“os : 5.1”表示当前运行的操作系统是:windowsxp最后一段程序利用了操作系统的版本信息,以确认运行的是windows xp。代码接着将当前进程的优先级提高到比正常级别高。单击ctrl + alt + del键,进入“windows任务管理器”,在“应用程序”选项卡中右键单击本任务,在快捷菜单中选择“转到进程”命令。在“windows任务管理器”的“进程”选项卡中,与本任务对应的进程映像名称是 (为什么?) :_ vcspawn.exe右键单击该进程名,在快捷菜单中选择“设置优先级”命令,可以调整该进程的优先级,如设置为“高”后重新运行程序,屏幕显示有变化吗?为什么?设置为高后process id变为3744,但是requires os和running os 都没有改变 ,原因是只改变了该进程的优先级操作系统没有改变 3终止进程指令其子进程来“杀掉”自己的父进程先分析程序功能,再写出运行结果:1) creating the child process.表示:创建子进程 2) telling the child process to quit表示:删除子进程在熟悉源代码的基础上,利用本实验介绍的api函数来尝试改进本程序 (例如使用getprocesstimes() api函数) 并运行。请描述你所做的工作:getprocesstimes() api函数可向主调者显示进程的终止时间。具体实现方法及说明 api getprocesstimesdeclare function getprocesstimes lib kernel32 alias getprocesstimes (byval hprocess as long, lpcreationtime as filetime, lpexittime as filetime, lpkerneltime as filetime, lpusertime as filetime) as long说明 获取与一个进程的经过时间有关的信息 返回值 long,非零表示成功,零表示失败。会设置getlasterror 参数表 参数 类型及说明 hprocess long,一个进程句柄 lpcreationtime filetime,指定一个filetime结构,在其中装载进程的创建时间 lpexittime filetime,指定一个filetime结构,在其中装载进程的中止时间 lpkerneltime filetime,指定一个filetime结构,在其中装载进程花在内核模式上的总时间 lpusertime filetime,指定一个filetime结构,在其中装载进程花在用户模式上的总时间说明4、 实验总结 在实验中通过读程序和调试程序更深的了解了进程的意义。熟悉了操作系统的进程概念,和windows 2000中进程的“一生”。也通过上网查了一些关于进程的资料。 进程定义:一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。进程的特征:动态性具有动态的地址空间独立性各进程的地址空间相互独立并发性宏观上各进程同时运行结构化进程的地址空间是结构化的进程与程序的区别:进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件,是静态的可以复制。进程是暂时的,程序的永久的:进程是一个状态变化的过程,程序可长久保存。进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。 实验二 并发与调度一、实验目的在本实验中,通过对事件和互斥体对象的了解,来加深对windows 2000线程同步的理解。通过分析实验程序,了解管理事件对象的api。了解在进程中如何使用事件对象,在进程中如何使用互斥体对象,线程如何通过文件映射对象发送数据。在linux redhat 9.0操作系统平台上,用pipe()创建一个管道文件,然后用fork()创建两个生产进程和两个消费进程,它们之间通过pipe()传递消息。二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional,linux redhat 9.0操作系统平台,visual c+ 6.0企业版。3、 实验内容和步骤第一部分:互斥体对象本程序中显示的类ccountupdown使用了一个互斥体来保证对两个线程间单一数值的访问。每个线程都企图获得控制权来改变该数值,然后将该数值写入输出流中。创建者实际上创建的是互斥体对象,计数方法执行等待并释放,为的是共同使用互斥体所需的资源 (因而也就是共享资源) 。利用互斥体保护共享资源。1) 请描述运行结果 (如果运行不成功,则可能的原因是什么?) 0线程和1线程交替执行 ,占用系统资源 ,交替50次后,数值应该返回初始值 (0)运行到此时结束 。如果运行不成功,可能是因为两个线程争用资源时发生了阻塞现象,使程序无法继续进行 2) 根据运行输出结果,对照分析程序,可以看出程序运行的流程吗?请简单描述:分析程序的运行结果,可以看到线程 (加和减线程) 的交替执行 (因为sleep() api允许windows切换线程) 。在每次运行之后,数值应该返回初始值 (0) ,因为在每次运行之后写入线程在等待队列中变成最后一个,内核保证它在其他线程工作时不会再运行第二部分 线程通过文件对象发送数据 windows 2000提供的线程间通讯类内核对象允许同一进程或跨进程的线程之间互相发送信息,包括文件、文件映射、邮件位和命名管道等,其中最常用的是文件和文件映射。这类对象允许一个线程很容易地向同一进程或其他进程中的另一线程发送信息。演示线程通过文件对象发送数据运行结果 (如果运行不成功,则可能的原因是什么?) :程序函数写的不全,致使程序有错误阅读和分析程序,请回答问题:1) 程序中启动了多少个单独的读写线程?循环了100次应该有100个单独的线程 2) 使用了哪个系统api函数来创建线程例程?handle hthread = : createthread3) 文件的读和写操作分别使用了哪个api函数?dword dwxfer(0) ; : readfile : writefile 每次运行进程时,都可看到程序中的每个线程从前面的线程中读取数据并将数据增加,文件中的数值连续增加。这个示例是很简单的通讯机制。可将这一示例用作编写自己的文件读/写代码的模板。请注意程序中写入之前文件指针的重置。重置文件指针是必要的,因为该指针在读取结束时将处于前四个字节之后,同一指针还要用于向文件写入数据。如果函数向该处写入新数值,则下次进程运行时,只能读到原来的数值。那么:4) 在程序中,重置文件指针使用了哪一个函数? tchar szfullname max_path ; : gettemppath(max_path, szfullname5) 从输出结果,对照分析程序,可以看出程序运行的流程吗?请简单描述: 循环执行一百次文件读写操作,然后停止 第三部分 用pipe()创建一个管道文件,然后用fork()创建两个生产进程和两个消费进程,它们之间通过pipe()传递消息。fork系统调用 pid=fork();创建一个子进程,子进程是父进程的完整复制,正常返回值为非负整数。对于父进程来说该数大于0,是子进程的编号(pid);对于子进程来说该数为零。正是利用返回值的不同可以决定二者的后续动作。pipe系统调用 ret_val=pipe(fd); 参数定义为 int fd2。创建一个管道文件,返回两个文件描述符fd0和fd1,它们分别用于管道文件的读和写操作。管道文件创建后,可以被fork所创建的子进程共享。先阅读和分析程序,写出运算结果1) 程序中用来创建一个文件映射对象的系统api函数是哪个?createfilemapping() 2) 在文件映射上创建和关闭文件视图分别使用了哪一个系统函数?a. mapviewoffile()b. closehandle()3) 运行时,程序首先通过 ( createfilemapping() ) 函数创建一个小型的文件映射对象 ( hmapping ) ,接着,使用系统api函数 ( createmutex() ) 再创建一个保护其应用的互斥体 ( g_hmutexmapping ) 。然后,应用程序创建100个线程,每个都允许进行同样的进程,即:通过互斥体获得访问权,这个操作是由语句:waitforsingleobject(g_hmutexmapping, infinite) 实现的。再通过函数 ( mapviewoffile() ) 操作将视图映射到文件,将高32位看作有符号整数,将该数值增加 (即命令: long * pndata = reinterpret_cast (pfile) ) ,再将新数值显示在控制台上。每个线程清除文件的视图并在退出之前释放互斥体释放互斥体的语句是 unmapviewoffile(pfile) releasemutex(g_hmutexmapping) 。当线程完成时,应用程序关闭并退出。4) 将程序中的语句 : sleep(500) ; 删除 (例如在语句前面加上“/”) 后,重新编译运行,结果有变化吗?为什么?把sleep()内容改后,执行速度变快。sleep()功能:执行挂起一段时间。里面的单位,是以毫秒为单位。四、实验总结 在实验中学习了一些与windows线程的有关apicreatethread()函数在调用进程的地址空间上创建一个线程,以执行指定的函数;返回值为所创建线程的句柄。exitthread()函数用于结束本线程。suspendthread()函数用于挂起指定的线程。resumethread()函数递减指定线程的挂起计数,挂起计数为0时,线程恢复执行。实验三 存储管理一、实验目的通过实验了解windows 2000内存的使用,学习如何在应用程序中管理内存,体会windows应用程序内存的简单性和自我防护能力。学习检查虚拟内存空间或对其进行操作;了解windows 2000的内存结构和虚拟内存的管理,进而了解进程堆和windows为使用内存而提供的一些扩展功能。二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional,visual c+ 6.0企业版。三、实验内容和步骤在windows 2000环境下,4gb的虚拟地址空间被划分成两个部分:低端2gb提供给进程使用,高端2gb提供给系统使用。这意味着用户的应用程序代码,包括dll以及进程使用的各种数据等,都装在用户进程地址空间内 (低端2gb) 。 第一部分 虚拟内存的检测将系统当前的自由区 (free) 虚拟地址空间填入表中。地址大小虚拟地址空间类型访问权限描述freefreefreefreefree将系统当前的已调配区 (committed) 虚拟地址空间填入表中。地址大小虚拟地址空间类型访问权限描述committedcommittedcommittedcommittedcommitted将系统当前的保留区 (reserved) 虚拟地址空间填入表5-8中。地址大小虚拟地址空间类型访问权限描述reservedreservedreservedreservedreserved第二部分 虚拟内存操作示例程序显示了如何分配一个大容量空间,将物理存储委托给其中的很小一部分 (千分之一) 并加以使用。分配和使用大块内存对照运行结果,分析程序。为了给数据库保留1gb的段地址空间,程序给出了内存分配的四种方法。 第一种技术即程序中说明为_使用内存分配来获得1gb块_的程序段,该段程序试图利用标准c中的malloc() 函数,从已经已调配的小内存区获得内存。从运行结果看,这种技术成功了吗?不成功。 第二种技术即程序中说明为_使用虚拟分配以获得物理1gb块_的程序段,该段程序试图通过virtualalloc() ,然后利用物理备用内存将整个块分配到虚拟内存空间的任何位置。这种技术只对拥有1gb以上的ram且都有换页文件的计算机可行。从运行结果看,这种技术成功了吗?_不成功_。 第三种技术即程序中说明为_使用虚拟分配以获得虚拟1gb块的程序段,该段程序利用virtualalloc() ,如果函数成功,则获得大块内存,但不将任何物理内存调配到此块中。从运行结果看,这种技术成功了吗?_不成功。 第四种技术即程序中说明为_使用虚拟分配调配获得虚拟1gb块,再为其调配1mb物理存储 的程序段,该段程序保留1gb的内存区,然后将物理内存调配给其中的很小一部分 (1mb) 。这就是程序介绍的处理一个假想的数据库应用程序的方法:保留整个块,然后按要求在其一小部分内进行读操作,让系统将用过的区域换页到磁盘中。利用virtuallock() api,windows可用来在自己的进程空间中控制虚拟内存的行为。这个函数与其成对的virtualunlock() 阻止或允许一块内存从物理ram中换页和换页到页面文件中。这样就会通知系统有一段特定的内存区要求对用户作出强烈的响应,所以系统不应将其移出ram。当然,如果要将整个虚拟内存空间锁定,系统就会停留于试图将系统中工作内存的每一小块换页到磁盘4、 实验总结 虚拟存储器的定义: 在具有层次结构存储器的计算机系统中,采用自动实现部分装入和部分对换功能,为用户提供一个比物理主存容量大得多的,可寻址的一种“主存储器”。 程序的局部性原理: 指程序在执行过程中的一个较短时间内,所执行的指令地址或操作数地址分别局限于一定的存储区域中。又可细分时间局部性和空间局部性。 第一,程序中只有少量分支和过程调用,大都是顺序执行的指令。 第二,程序包含若干循环,是由相对较少的指令组成,在循环过程中,计算被限制在程序中很小的相邻部分中。 第三,很少出现连续的过程调用,相反,程序中过程调用的深度限制在小范围内,一段时间内,指令引用被局限在很少几个过程中。 第四,对于连续访问数组之类的数据结构,往往是对存储区域中相邻位置的数据的操作。 第五,程序中有些部分是彼此互斥的,不是每次运行时都用到的,如出错处理程序。实验四 输入输出管理一、实验目的在本实验中,我们通过一个应用程序示例来讨论鼠标编程技巧,了解如何响应鼠标消息和如何在应用程序中捕获鼠标,从而加深理解windows 2000输入/输出处理技术。通过linux重定向和管道操作,熟悉并掌握linux环境下输入/输出重定向技术。掌握把标准输出重定向创建一个文件;防止使用重定向的时候覆盖文件;把输出追加到一个现有的文件中;把一个命令的输出导入到另一个命令中。通过对机器内部扬声器的编程,了解和学习linux内部设备的控制和管理方法。二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional,linux redhat 9.0,visual c+ 6.0专业版或企业版。三、实验内容和步骤第一部分 windows鼠标处理一台计算机拥有大量的输入设备,而鼠标和键盘是其中最常用的输入设备。实际上,基本的鼠标和键盘处理就像使用visual c+ 的class wizard在mfc程序中添加一两个消息响应函数一样简单。在本实验中,我们通过一个应用程序示例来讨论鼠标编程技巧,了解如何响应鼠标消息和如何在应用程序中捕获鼠标。实验程序另附。步骤1:登录进入windows 2000 professional。步骤2:在“开始”菜单中单击“程序”-“microsoft visual studio 6.0”-“microsoft visual c+ 6.0”命令,进入visual c+ 窗口。步骤3:在file菜单单击open workspace.命令,在“open workspace”对话框中找到实验代码文件夹并打开实验文件mouse.dsw。步骤4:单击build菜单中的build mouse.exe命令,系统对程序进行编译并建立可执行文件。操作能否正常进行?如果不行,则可能的原因是什么? 不能打开 fatal error c1083: cannot open include file: stdafx.h: no such file or directory_步骤5:在工具栏单击“execute program”按钮,执行mouse.exe程序,响应鼠标消息。mouse示例程序演示了如何截取和响应鼠标消息。运行这个程序,就会显示一个主窗口。最初窗口是空白的,但是直接在窗口中移动鼠标,wm_mousemove消息就会出现在窗口上,同时显示鼠标的坐标。在鼠标经过窗口时单击鼠标左键,窗口中不仅出现wm_lbuttondown和wm_lbuttonup消息,而且显示事件发生的坐标。单击鼠标右键,再次出现上述情况。请记录: wm_mousemovex: 166y: 195wm_lbuttondownx: 166y: 195wm_lbuttonupx: 166y: 195wm_rbuttondownx: 210y: 115wm_rbuttonupx: 210y: 210观察演示情况,请说明,显示的各消息反映了什么鼠标事件? wm_mousemove:鼠标当前所在位置的坐标 wm_lbuttondown:鼠标左击时按下去时所在位置的坐标 wm_lbuttonup:鼠标左击时弹上来时所在位置的坐标 wm_rbuttondown:鼠标右击时按下去时所在位置的坐标wm_rbuttonup:鼠标右击时弹上来时所在位置的坐标步骤6:捕获鼠标消息。mouse应用程序也举例说明了鼠标捕获的技巧。有些时候需要应用程序接收鼠标消息,甚至鼠标不在应用程序客户区时,也有这个要求。例如在一个画图程序中,用户在窗口中画线时一直接住鼠标左键。如果一个用户碰巧把鼠标指针移到画图应用程序的窗口之外,应用程序必须继续接收鼠标消息。否则用户在窗口之外释放鼠标按钮,应用程序将无法知道用户是否仍旧在画图。为了解鼠标捕获的工作情况,可把指针移动到mouse应用程序的客户区,然后一直按住鼠标右键,在屏幕上任意移动鼠标。即使鼠标移动到窗口外,窗口继续接收鼠标消息。在不按住鼠标右键移动鼠标时,鼠标指针离开了应用程序的客户区的情况下,应用程序停止接收鼠标消息。注意到,在按住鼠标右键移动到客户区外面左侧时,wm_mousemove的坐标值现在为负的。这是因为什么?左上角是整个坐标系的(0,0)点,鼠标向左边走的时候x为负,鼠标向上走时y为负,向左上角走时想,x,y都为负。步骤7:测试 mouse应用程序由于在窗口的视图类cmouseview 中定义了消息响应函数,mouse应用程序会响应鼠标消息。作为mfc编程的一条规则,cmouseview使用消息映射把消息和消息响应函数联系起来。每一个包含消息映射体的宏把鼠标消息和适当的消息处理程序相关联。例如,当窗口接收wm_mousemove消息时,on_wm_mousemove宏通知mfc调用onmousemove() 函数。同样,当窗口接收wm_lbuttondown消息时,消息映射通知mfc调用onlbuttondown() 函数。出现在mouse应用程序窗口的文本由视图类消息响应函数来显示。在鼠标指针移动到应用程序窗口时,mouse应用程序接收这些消息流。作为函数的第二个参数传送的cpoint对象包含了在事件发生时鼠标指针所在位置的信息。onmousemove从cpoint对象中建立一个显示的字符串,并且在应用程序的窗口中显示这个字符串。onlbuttondown() 、onlbuttonup() 、onlbuttondblclk() 和onrbuttondblclk()函数工作情况相似,把cpoint对象转变为在应用程序窗口中显示的显示字符串。步骤8:读懂windows 2000获取鼠标消息的函数以及对事件处理的代码,在此基础上修改原程序段,产生新的响应事件:1) 修改鼠标左键单击后的事件,使在单击鼠标后,在单击的位置上出现“你好”字样。2) 修改鼠标右键单击释放的事件,使在单击鼠标按下的位置出现“再”字,在释放右键的位置上出现“见”字。操作是否成功?如果不行,则可能的原因是什么?步骤9:单击窗口右上角的“关闭”按钮,结束程序的运行。第二部分 linux重定向和管道在本实验中将会用到下列命令:pwd:显示当前的工作路径。cd:改变目录路径。ls:显示指定目录的内容。more:分页显示文件的内容。这是用于显示文本文件的首选方法。head:截取显示文件的开头部分 (默认为开头10行) 。tail:截取显示文件的结尾部分 (默认为最后10行) 。cal:有关日历的命令。set:shell特性的设置。echo:显示变量的值。ps:显示当前进程。data:显示或设置系统日期和时间。grep:查找文件中有无指定的关键字。步骤1:开机,登录进入gnome。在gnome登录框中填写指导老师分配的用户名和口令并登录。步骤2:访问命令行。单击红帽子,在“gnome帮助”菜单中单击“系统工具”-“终端”命令,打开终端窗口。 1. 使用重定向标准输出符号步骤3:重定向标准输出,创建一个文件。右尖括号或称大于符号 () 把命令的输出发送到一个文件中:使用单个右尖括号,当指定文件名不存在的时候,将创建一个新文件;如果文件名存在,它将被覆盖。(注意:命令、重定向符号和文件名之间的空格是可选的) 。重定向标准输出命令的格式是: command file1) 为核实当前所在目录位置,使用什么命令? _ pwd_ _如果当前位置不在主目录中,使用什么命令可以改变到主目录中? _cd/_2) 如果希望把文件和目录列表截获,存储为主目录中的一个文件,这样可以追踪主目录中有什么文件。使用什么命令,把长文件列表的输出重定向,创建一个叫做homedir.list的文件。 _ ls homedir.list _ _3) 新文件homedir.list被放在哪里? _/home/studeng/homedir.list 使用ls命令核实新文件存在。4) 使用什么命令,以一次一屏的方式,来查看刚才创建的文件内容? more homedir.list 5) 使用head命令截获homedir.list文件的前10行,通过重定向,创建一个叫做dhomedir.list-top-10的新文件。应该使用什么命令? _ headdhomedir.list-top-10_ _使用more命令查看文件的内容。6) 使用tail命令,截获homedir.list文件的最后10行,通过重定向,创建一个叫做dhomedir.list-top-10的新文件。使用什么命令? tail dhomedir.list-top-10 7) 截获cal -y命令的输出,把它存到名为calendar的文件中。查看文件的内容。截获了什么?2006年的日历 _跟cal -y一样的效果 8) 截获cal 2010命令的输出,把它存到名为calendar的文件中。查看文件的内容。其中有什么内容?2010年的日历 _ _日历有什么变化? _年份改变2006-2010 步骤4:防止使用重定向的时候覆盖文件。在bash shell中,一个叫做noclobber的选项可以用来设定防止在重定向的过程中覆盖文件。可以在命令行中使用$set -o noclobber命令来完成。o代表选项。为了重新激活clobber特性,使用$set -o noclobber;撤消则用set +o noclobber。如果你使用的是csh shell,为了激活/撤消c shell中的clobber特性,使用set noclobber和unset noclobber。1) 输入命令,打开shell中的noclobber选项。输入什么命令? _ set o novlobber _2) 输入命令ls -l homedir.list,结果是什么?cannot overwrite exiting file 3) 输入命令ls -l homedir.list2,结果是什么? _ homedir.list2 创建 步骤5:向现有的文件追加输出。如果想向一个现有的文件追加 (添加到末尾) 文本而不是覆盖它,可以使用双右尖括号 () 。这个选项当文件不存在的时候,会创建一个新文件,或者追加到已有文件。追加命令的格式是: command file1) 输入命令,显示“happy bday”一行字,使用重定向符号截获输出,把它存到叫做bday4me的文件中。使用什么命令? echo “happy bday”bday4me2) 输入命令,显示“yourname!”一行字,使用双重定向符号,把输出追加到bday4me文件中。查看bday4me文件的内容。其中有什么? happy bday yourname3) 输入命令,显示您出生年月的日历 (如果在1985年的6月出生,输入cal 6 1985) ,使用双重定向符号,把输出追加到bday4me文件中。使用什么命令? cal 2 1986bday4me4) 查看bday4me文件的内容。注意这3个命令的输出在bday4me文件中已经被组合起来了。您是在一周中的哪一天出生的? 周日_ _ 2. 使用管道符号步骤6:把命令的输出导入到另一个命令中。1) 使用管道元字符,发送ls -l命令的输出,作为more命令的输入 (注意:如果在当前目录中没有太多的文件,使用 /etc目录获取长列表) 。把输出作为more命令的输入的时候,得到什么结果? 获得了文件的详细列表2) 查看使用ls l | more命令列出来的文件,注意创建或修改的日期。为了查看在同一个月被创建或修改的文件或目录的列表,可以使用grep命令对那个月进行搜索。当月份显示在列表中的时候,指定它 (例如:oct) 。输入命令ls -1 | grep oct (或者想查找的月份) 。结果是什么? 显示了创建或修改的日期为10月的文件3) 目录总是4096字节大小。输入命令ls -1 | grep 4096。产生的列表是什么? _当前目录下文件大小为4096在的行_4) 可以使用多个管道连接多个命令。输入取得长文件列表输出的命令,把它输入给tail命令,然后到sort命令。输入的命令是: ls -1/etc|tail|sort5) ps (进程状态) 命令用于查看linux系统中运行什么进程。把ps -e命令的输出输入给more命令。-e选项将给出每一个在系统中运行的进程。把输出输入到more命令中的结果是什么分页显示当前运行的所有进程 步骤7:删除在本实验中创建的文件和目录。步骤8:关闭终端窗口,注销。4、 实验总结 所谓重定向,就是不使用系统的标准输入端口、标准输出端口或标准错误端口,而进行重新的指定,所以重定向分为输出重定向、输入重定向和错误重定向。 linux 系统中为每个命令都要打开三个文件,标准输入、标准输出、标准出错输出。(stdin、stdout、stderr)。 管道在某种程度上是输入和输出重定向的结合。其原理同物理管道类似:一个进程向管道的一端发送数据,而另一个进程从该管道的另一端读取数据。管道是进程间通信的一种机制,直接在内存中操作。cat file1 | file2 表示将 file1 作为输入,同时将输出定向到 file2 文件。省去了中间步骤:cat file1 temp ; cat tempfile2。实验五 文件系统一、实验目的通过本实验,要求学生熟练掌握linux各种文件操作命令,包括:使用控制字符执行特殊功能;使用file和strings命令确定文件类型;使用cat利more命令显示文本文件的内容;使用head和tail命令显示文本文件的部分内容;使用wc命令确定单词、行和字符数;使用diff命令比较2个文件;回顾文件和目录命名约定;使用touch命令创建新文件;使用mkdir命令创建新目录;使用rm命令删除文件;使用rm -r命令删除目录。二、实验环境硬件环境:计算机一台,局域网环境;软件环境: linux redhat 9.0操作系统平台。三、实验内容和步骤1.文件信息命令步骤1:开机,登录进入gnome。在gnome登录框中填写指导老师分配的用户名和口令并登录。步骤2:访问命令行。单击红帽子,在“gnome帮助”菜单中单击“系统工具”-“终端”命令,打开终端窗口。步骤3:使用控制字符执行特殊功能。控制字符用来执行特殊的作业,如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车零部件结构有限元分析实操案例
- 电子商务平台促销策略分析
- 环境污染防治技术标准汇编
- 2025河北体育学院选聘第二批工作人员15人笔试考试备考题库及答案解析
- 隐患整改通知发布流程及范文示例
- 新零售场景下的顾客体验优化
- 工程项目施工进度控制表把控关键节点与工程目标同步
- 石材清洁养护操作规范与流程
- 2026国网江西省电力有限公司高校毕业生招聘700人考试笔试备考试题及答案解析
- 2026年绍兴市本级卫生健康单位赴浙江中医药大学招聘22人考试笔试参考题库附答案解析
- 国家开放大学《课程与教学论》形考任务1-4参考答案
- GB/T 13871.1-2022密封元件为弹性体材料的旋转轴唇形密封圈第1部分:尺寸和公差
- GB/T 35626-2017室外照明干扰光限制规范
- GB/T 22378-2008通用型双向拉伸聚丙烯膜压敏胶黏带
- 光伏发电站设计标准规范
- 中医常用方剂课件
- 荣誉证书模板word版,可编辑打印
- (国开电大)可编程控制器应用 课程实验
- 皮带机及钢栈桥改造工程施工方案
- CHD双心治疗心可舒解析课件
- 食堂搭伙协议参考
评论
0/150
提交评论