基于操作系统的编程复习

上传人:M****1 文档编号:575741945 上传时间:2024-08-18 格式:PPT 页数:76 大小:1,016.50KB
返回 下载 相关 举报
基于操作系统的编程复习_第1页
第1页 / 共76页
基于操作系统的编程复习_第2页
第2页 / 共76页
基于操作系统的编程复习_第3页
第3页 / 共76页
基于操作系统的编程复习_第4页
第4页 / 共76页
基于操作系统的编程复习_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《基于操作系统的编程复习》由会员分享,可在线阅读,更多相关《基于操作系统的编程复习(76页珍藏版)》请在金锄头文库上搜索。

1、基于操作系统的编程复习张玉宏张玉宏第一章1 Linux的特性2. C语言的特点3.Linux Shell的提示符及磁盘(U盘、光盘,硬盘等)的挂载4.常用的Shell命令1.4.2LinuxShellShell有两种提示符:#和$。图1-30所示的终端提示符是#。以“#”为提示符表明该终端是由root用户打开的,root用户具有系统最高权限,因此可以输入任何可用的命令1.4.2LinuxShellShell有两种提示符:#和$。一般用户打开的终端的提示符是“$”比如halt命令只能由root使用,普通用户在“$”提示符下输入halt命令,系统认为是一个无效命令。提示符的其他部分分别表示登录用户

2、名主机名当前目录。1.4.2LinuxShellShell命令的基本格式是:命令名 选项其中方括号中的选项对命令来说是可选的,一条命令可以有0个或多个参数。选项是对命令的特别定义,也可以理解为选项告诉命令具体做什么。选项通常以“-”开始,后接一个或多个字母,如ls-al,有的选项以“-”开头,后面一般跟着一个单词,比如-number。很多“-”格式的选项可以用“-”加上第一个字母来替代,如-number可以用-n来替代。掌握:Linux系统挂载挂载U盘和硬盘光驱盘和硬盘光驱的问题Linux挂载U盘:1、插入u盘到计算机,如果目前只插入了一个u盘而且你的硬盘不是scsi的硬盘接口的话,那它的硬件

3、名称为:sda1。 2、在mnt目录下先建立一个usb的目录(如:rootlocalhostroot#mkdir/mnt/usb)Linux系统挂载U盘4、卸载U盘:umount/mnt/usb5、删除usb目录:rm-rf/mnt/usb在实际中操作中,直接加挂一个windows的分区,中文的文件名和目录名会出现乱码,为了避免这种情况可以指定字符集,命令如下: mount-tvfat/dev/sdb1/mnt/usb-ocodepage=936,iocharset=cp936注意:cp936是指简体中文,cp950是指繁体中文。2.加挂NTFS文件系统同样对于中文的文件名和目录名会出现乱码的

4、问题可以指定字符集,不过和加挂vfat分区不同,实际中用以下命令是可行的: mount-tntfs-oiocharset=cp936/dev/hda2/mnt/c-rmount-tntfs-oiocharset=cp936,rw/dev/hda2/mnt/c注意:cp936是指简体中文,cp950是指繁体中文。 卸载删除同上!三.Linux自动挂载硬盘打开/etc找到里面的fstab文件进行编辑,如果你是以管理员身份登入的话,可以直接右键-打开方式-gedit,可以直接在后面追加行:/dev/hda6/mnt/winevfatcodepage=936,iocharset=cp936,defau

5、lts,umask=000/dev/hda5/mnt/windvfatcodepage=936,iocharset=cp93600四.Linux挂载光驱:命令:mount-tiso9660/dev/hdc/mnt/cdrom卸载删除同上!Linux系统中的虚拟终端Linux的字符界面称为虚拟终端或虚拟控制台,可为用户提供多个互不干扰、独立工作的工作界面。Linux的虚拟终端默认有7个,其中从第1个到第6个虚拟终端是字符界面而第7个则是图形化用户界面,虚拟终端之间可以相互切换Linux系统中的虚拟终端在字符界面时AltF1AltF7可从字符界面的虚拟终端切换到其他虚拟终端。如果已经启动了X-Wi

6、ndow,则可以使用Ctrl+Alt+F1(F2、F3、F4、F5、F6均可以)进入字符状态,按Ctrl+Alt+F7回到X-Window虚拟机下Linux的虚拟终端切换vmware安装的linux9,一按下ctrl+alt,就回到windows平台/Virtualpc安装的linux9,一按下alt,就回到windows平台在xwindow下输入init3,进入字符界面,在字符界面输入init5,回到xwindowinit0关机init3字符界面init5图形界面init6重启在字符界面 startx命令也可以回到x-window!Linux常用目录的含义/bin存放着使用者最经常使用的命令

7、,例如ls等。/boot存放的是启动Linux时使用的一些核心文件。 /devdev是device(设备)的缩写。这个目录下是所有Linux的外部设备,在Linux中设备和文件是用同种方法访问的。例如:/dev/hda代表第一个物理IDE硬盘。/etc这个目录用来存放系统管理所需要的配置文件和子目录。 /home用户的主目录,比如说有个用户叫wang,那他的主目录就是/home/wang。 /lib这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的.dll文件。几乎所有的应用程序都须要用到这些共享库。 /mnt这个目录是空的,系统提供这个目录是让用户临时挂载别的文件系统

8、。 常用的SHELL命令(重要:牢记)(重要:牢记)仅仅列几个仅仅列几个注销 在字符界面下,注销可使用的方法有两种:输入“exit”或者使用CtrlD快捷键。重启 当需要重新启动计算机时,输入“reboot”或者“shutdown r now”命令即可。ls命令格式:格式:ls选项选项文件文件|目录目录功能:用来列出目录的内容。功能:用来列出目录的内容。参数参数:-l(显示文件和子目录详细信息显示文件和子目录详细信息)-a(表示要列出所有的文件表示要列出所有的文件)-d(显示目录信息显示目录信息)-t(按照时间顺序显示)按照时间顺序显示)-R(递归地显示目录中的文件和子目录信息递归地显示目录中

9、的文件和子目录信息)常用的常用的SHELL命令命令mkdir命令功能功能:建立目录建立目录。参数参数:-p(建立所有不存在父目录的目录建立所有不存在父目录的目录)例例1:$mkdir-pxnd/wll在当前目录下建立在当前目录下建立xnd和和xnd下的下的wll的目录的目录,也就是也就是连续建立两个目录(连续建立两个目录(xnd和和xnd/wll)。(不带参数只能建一级目录)(不带参数只能建一级目录)rmdir命令功能功能:删除一个空的目录。删除一个空的目录。参数参数:-p(递归删除目录递归删除目录)例例1:$rmdir-pxnd/wll将删除将删除xnd下的下的wll的目录,若的目录,若xn

10、d目录为空也删除目录为空也删除它。它。注:不带参数是只是删除注:不带参数是只是删除wllcp命令功能功能:复制文件或目录复制文件或目录。参数参数:-f(强行覆盖强行覆盖)-i(覆盖时询问覆盖时询问)-r(拷贝目录拷贝目录)例例1:$cp-r/usr/xu/usr/liu/将将/usr/xu目录中的所有文件及其子目录拷贝到目录目录中的所有文件及其子目录拷贝到目录/usr/liu中。中。第二章1.C语言关键的语法,熟练掌握面试题所涉及到的语法点。2.掌握如果利用GCC编译一个C语言文件3.掌握常用的vim命令4.掌握Makefile的编写4.掌握GDB调试程序的逻辑错误(复习原则:看懂课件所所涉及

11、到的例题)5、请找出下面代码中的所有点错误,并给出修改方案、请找出下面代码中的所有点错误,并给出修改方案说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”1、#includestring.h2、main()3、4、char*src=hello,world;5、char*dest=NULL;6、intlen=strlen(src);7、dest=(char*)malloc(len);8、char*d=dest;9、char*s=srclen;10、while(len-!=0)11、d+=s-;12、printf(%s,dest);13、return0;14、方法1:intma

12、in()char*src=hello,world;intlen=strlen(src);char*dest=(char*)malloc(len+1);/要为0分配一个空间char*d=dest;char*s=&srclen-1;/指向最后一个字符while(len-!=0)*d+=*s-;*d=0;/尾部要加0printf(%sn,dest);free(dest);/使用完,应当释放空间,以免造成内存汇泄露return0;vim命令学习-1(仅列举部分仅列举部分)1.欲进入vim编辑器(从命令行提示符),请输入vim文件名 2.光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl字母键。

13、h(左移)j(下行)k(上行)l(右移)3.欲退出vim编辑器,请输入以下命令放弃所有修改 :q!或者输入以下命令保存所有修改:wqvim命令学习-24.在正常模式下删除光标所在位置的字符,请按 x5.在正常模式下要在光标所在位置开始插入文本,请按 i输入必要文本 特别提示按下 键会带您回到正常模式或者取消一个不期望或者部分完成的命令vim命令学习-31. 欲从当前光标删除至单字/单词末尾,请输入dw 2. 欲从当前光标删除至当前行末尾,请输入d$ 3. 欲删除整行,请输入dd vim命令学习-44.在正常模式下一个命令的格式是numbercommandobject或者 commandnumb

14、erobject其意是number-代表的是命令执行的次数command-代表要做的事情,比如 d代表删除.object-代表要操作的对象,比如 w代表单字/单词,$代表到行末等等。$(totheendofline),etc.vim命令学习-4dnw:删除n个单词dne:也可,只是删除到单词尾dnl:向右删除n个字母dnh:向左删除n个字母dnj:向下删除n行dnk:向上删除n行d$:删除当前光标到改行的行尾的字母dd:删除一行vim命令学习-45. 欲撤消以前的操作,请输入u (小写的u)欲撤消在一行中所做的改动,请输入U (大写的U)欲撤消以前的撤消命令,恢复以前的操作结果,请输入CTRL

15、-R1.gcc编译器选项-o选项,表示我们要求输出的可执行文件名.-c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件.-g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息.1.gcc编译器选项知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了如果你想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说明.3.Makefile的编写假设我们有下面这样的一个程序,源代码如下:/*main.c*/#includemytool1.h#includemytool2.hintmain(intargc,char*argv)mytool1_pri

16、nt(hello);mytool2_print(hello);3.Makefile的编写/*mytool1.c*/#includemytool1.hvoidmytool1_print(char*print_str)printf(Thisismytool1print%sn,print_str);/*mytool1.h*/#ifndef_MYTOOL_1_H#define_MYTOOL_1_Hvoidmytool1_print(char*print_str);#endif/*mytool2.h*/#ifndef_MYTOOL_2_H#define_MYTOOL_2_Hvoidmytool2_pri

17、nt(char*print_str);#endif/*mytool2.c*/#includemytool2.hvoidmytool2_print(char*print_str)printf(Thisismytool2print%sn,print_str);3.Makefile的编写当然由于这个程序是很短的我们可以这样来编译 gcc-cmain.cgcc-cmytool1.cgcc-cmytool2.cgcc-omainmain.omytool1.omytool2.o这样的话我们也可以产生main程序,而且也不时很麻烦.但是如果我们考虑一下 如果有一天我们修改了其中的一个文件(比如说mytool

18、1.c),那么我们还要重新输入上面的命令,非常的麻烦!3.Makefile的编写下面我们学习Makefile是如何编写的.在Makefile中#开始的行都是注释行.Makefile中最重要的是描述文件的依赖关系的说 明.一般的格式是:target:componentsTABrule/第一行表示的是依赖关系./第二行是规则.#注释行,注释行,这是原来程序的这是原来程序的Makefile文件文件main:main.omytool1.omytool2.ogcc-omainmain.omytool1.omytool2.omain.o:main.cmytool1.hmytool2.hgcc-cmain.

19、cmytool1.o:mytool1.cmytool1.hgcc-cmytool1.cmytool2.o:mytool2.cmytool2.hgcc-cmytool2.c#这是简化后的这是简化后的Makefilemain:main.omytool1.omytool2.ogcc-o$main.o:main.cmytool1.hmytool2.hgcc-c$mytool1.o:mytool1.cmytool1.hgcc-c$mytool2.o:mytool2.cmytool2.hgcc-c$:目标文件:目标文件$:所有的依赖文件:所有的依赖文件$cc-ghello.c-ohellog+-ghell

20、o.cpp-ohello如果没有如果没有-g,将看不见程序的函数名、变量名,所,将看不见程序的函数名、变量名,所代替的全是运行时的内存地址代替的全是运行时的内存地址。当你用当你用-g把调试信息加入之后,并成功编译目标代把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用码以后,让我们来看看如何用gdb来调试程序。来调试程序。gdb基本命令一个调试示例(掌握!)/源程序:tst.c1#include23intfunc(intn)45intsum=0,i;6for(i=0;in;i+)78sum+=i;910returnsum;11121314main()1516inti;17longr

21、esult=0;18for(i=1;i=100;i+)1920result+=i;212223printf(result1-100=%dn,result);24printf(result1-250=%dn,func(250);25#includemain()charmy_string=hellothere;my_print(my_string);my_print2(my_string);voidmy_print(char*string)printf(Thestringis%sn,string);voidmy_print2(char*string)char*string2;intsize,i;s

22、ize=strlen(string);string2=(char*)malloc(size+1);for(i=0;isize;i+)string2size-i=stringi;string2size+1=0;printf(Thestringbackwardis%sn,string2);一个调试示例(掌握!)第三章进程控制1.掌握【字符】指针和多维数组的使用(重要!),在此基础上掌握带参main函数的使用2.掌握进程的几个状态的变迁及原因3.掌握getpid(),getppid()函数,fork函数,exec函数在C语言的使用复习原则:看懂例题,编程实践一下43444546main函数的几个参数

23、intmain(intargc,char*argv,char*envp);1.intargc表示你在命令行下输入命令的时候,一共有多少个参数。比方说你的程序编译后,可执行文件是testroothostlocalyhilytest这个时候,argc的值是1但是如果执行 roothostlocalyhilytestmyarg1myarg2argc的值是3。也就是 命令名 加上两个参数,一共三个参数47例如 roothostlocalyhilycp/home/yhily/123.c/home/456.cargc=3arg表示argument:Theindependentvariableofafunc

24、tion.函数的自变数c表示count48解释2.char*argv用来取得你所输入的参数 roothostlocalyhilytest这个时候,argc的值是1这个时候,argc的值是1,argv0指向的值是 test49解释roothostlocalyhilytestmyarg1myarg2这个时候,argc的值是3,argv0指向的值是test,argv指向的1的值是myarg1,argv2指向的的值是myarg2argv0argv1argv2test0myarg10myarg20argv505152思考一下:输入结果思考一下:输入结果会是怎么样的?会是怎么样的?5354exec()为了

25、调用系统程序,我们可以使用系 统调用exec族调用.exec族调用有着5个函数.55范例56第四章1.什么是文件系统,掌握常见的文件系统。2.Linux对文件的操作的两种方式3.掌握这两种方式在Linux C中的使用方法复习原则:看懂例题什么是文件系统操作系统中与管理文件有关的软件和数据称为文件系统。它负责为用户建立文件,撤消、读写、修改和复制文件,还负责完成对文件的按名存取和进行存取控制。 两类函数在Linux平台下对文件编程可以使用两类函数:(1)Linux操作系统文件API;(2)C语言I/O库函数。 前者依赖于Linux系统调用后者实际上与操作系统是独立的,因为在任何操作系统下,使用C

26、语言I/O库函数操作文件的方法都是相同的。本章将对这两种方法进行实例讲解。59第一种方式如果使用了O_CREATE标志,则使用的函数是intopen(constchar*pathname,intflags,mode_tmode);这个时候我们还要指定mode标志,用来表示文件的访问权限。mode可以是以下情况的组合:60Mode的标志位除了可以通过上述宏进行“或”逻辑产生标志以外,也可以自己用数字来表示:Linux总共用5个数字来表示文件的各种权限:第一位表示设置用户ID;第二位表示设置组ID;第三位表示用户自己的权限位;第四位表示组的权限;最后一位表示其他人的权限。6112345用户用户ID

27、组组ID用户权限用户权限组的权限组的权限他人权限他人权限Mode的标志位除了可以通过上述宏进行“或”逻辑产生标志以外,也可以自己用数字来表示:Linux总共用5个数字来表示文件的各种权限:第一位表示设置用户ID;第二位表示设置组ID;第三位表示用户自己的权限位;第四位表示组的权限;最后一位表示其他人的权限。6212345用户用户ID组组ID用户权限用户权限组的权限组的权限他人权限他人权限程序实例63范例程序阅读64范例程序阅读6566第二种方式.用C语言库函数对文件操作C库函数的文件操作实际上是独立于具体的操作系统平台的,不管是在DOS、Windows、Linux还是在VxWorks中都是这些

28、函数,也就是说这写都是国际通用函数:67文件类型FILE系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构体类型变量中,该结构体类型由系统定义、取名为FILE。特别注意:结构体类型名“FILE”必须大写。创建和打开文件FILE*fopen(constchar*path,constchar*mode);fopen()实现打开指定文件filename,其中的mode为打开模式。特别要注意的是:mode为字符串,和系统调用的不同C语言中支持的打开模式如下表:69打开模式703.1文件的打开与关闭对文件进行操作之前,必须先打开该文件;使用

29、结束后,应立即关闭,以免数据丢失。语言规定了标准输入输出函数库用fopen()函数打开一个文件用fclose()函数关闭一个文件。文件的打开fopen()函数1原型: FILE*fopen(文件名,操作方式);FILE*fopen(constchar*path,constchar*mode);2功能:返回一个指向指定文件的指针。 注:对文件操作的库函数,函数原型均在头文件stdio.h中。其中:(1)“文件名”是指要打开(或创建)的文件名。(2)“操作方式”如下图所示。 例如:FILE*fp;fpfopen(“1.txt”,“r”);一道考研题下面的程序的作用是从磁盘stu.dat中读取N个学生的姓名、学号、成绩,然后在屏幕输出。请将程序补充完整。1参考答案:1.stdio.h2.(fp=fopen(“stu.dat”,”rb”)!=NULL)3.fread(stud,sizeof(stuctstudent),N,fp);4.fclose(fp);这里仅仅给出主要大纲,详细这里仅仅给出主要大纲,详细内容还要仔细复习课件!内容还要仔细复习课件!TheEndThankyourattention!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号