您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > UNIX操作系统实验2
UNIX操作系统实验首都师范大学信息工程学院系统分析与管理实验室12目录1、UNIX安装及基本操作………………………………………2、UNIX编程基础……………………………………….3、UNIX进程实验……………………………………….4、UNIX进程间通信……………………………………..5、UNIX文件系统实验………………………………………..6、UNIX综合实验………………………………………..19223346491实验二UNIX编程基础一、背景知识UNIX文件可以分为二进制文件和文本文件。前者通常由程序生成;后者可以由程序生成也可以由编辑器来创建。UNIX可以使用多种编辑器:有以行为单位进行编辑的,如ed和ex;也有全屏幕编辑器,如vi和emacs等。由于UNIX和Linux的极大的相关性,在下面提到的有关NUIX和Linux的知识将交替使用UNIX和Linux的称谓。UNIX的编程常识:1、标准(ANSIC,POSIX,SVID,XPG等)2、函数库和系统调用3、在线文档(man,info,HOW-TO等)4、C语言编程风格5、库和头文件的保存位置6、共享库及其相关配置1、标准(ANSIC,POSIX,SVID,XPG等)a)ANSIC:这一标准是ANSI(美国国家标准局)于1989年制定的C语言标准。后来被ISO(国际标准化组织)接受为标准,因此也称为ISOC。ANSIC的目标是为各种操作系统上的C程序提供可移植性保证,而不仅仅限于UNIX。该标准不仅定义了C编程语言的语法和语义,而且还定义了一个标准库。这个库可以根据头文件划分为15个部分,其中包括:字符类型(ctype.h)错误码(errno.h)浮点常数(float.h)数学常数(math.h)标准定义(stddef.h)标准I/O(stdio.h)工具函数(stdlib.h)字符串操作(string.h)时间和日期(time.h)可变参数表(stdarg.h)信号(signal.h)2非局部跳转(setjmp.h)、本地信息(local.h)、程序断言(assert.h)等等。b)POSIX:该标准最初由IEEE开发的标准族,部分已经被ISO接受为国际标准。该标准分别定义了POSIX兼容操作系统的C语言系统接口以及shell和工具标准。这两个标准是通常提到的标准。SVID:SystemV的接口描述。SystemV接口描述(SVID)是描述AT&TUnixSystemV操作系统的文档,是对POSIX标准的扩展超集。XPG:X/Open可移植性指南。X/Open可移植性指南(由X/OpenCompany,Ltd.出版),是比POSIX更为一般的标准。X/Open拥有Unix的版权,而XPG则指定成为Unix操作系统必须满足的要求。2、函数库和系统调用a)glibc:众所周知,C语言并没有为常见的操作,例如输入/输出、内存管理,字符串操作等提供内置的支持。相反,这些功能一般由标准的“函数库”来提供。GNU的C函数库,即glibc,是Linux上最重要的函数库,它定义了ISOC标准指定的所有的库函数,以及由POSIX或其他UNIX操作系统统变种指定的附加特色,还包括有与GNU系统相关的扩展。目前,流行的Linux系统使用glibc2.0以上的版本。glibc基于如下标准:ISOC:C编程语言的国际标准,即ANSIC。POSIX:GNUC函数库实现了ISO/IEC9945-1:1996(POSIX系统应用程序编程接口,即POSIX.1)指定的所有函数。该标准是对ISOC的扩展,包括文件系统接口原语、设备相关的终端控制函数以及进程控制函数。同时,GUNC函数库还支持部分由ISO/IEC9945-2:1993(POSIXShell和工具标准,即POSIX.2)指定的函数,其中包括用于处理正则表达式和模式匹配的函数。BerkeleyUNIX:BSD和SunOS。GNUC函数库定义了某些UNIX版本中尚未标准化的函数,尤其是4.2BSD,4.3,BSD,4.4BSDUNIX系统(即“BerkeleyUNIX”)以及“SunOS”(流行的4.2BSD变种,其中包含有某些UNIXSystemV的功能)。BSD函数包括符号链接、select函数、BSD信号处理函数以及套接字等等。SVID:SystemV的接口描述。GNUC函数库定义了大多数由SVID指定而未被ISOC和POSIX标准指定的函数。来自SystemV的支持函数包括进程间通信和共享内存、hsearch和drand48函数族、fmtmsg以及一些数学函数。XPG:X/Open可移植性指南。GNUC函数库遵循X/Open可移植性指南(Issue4.2)以及所有的XSI(X/Open系统接口)兼容系统的扩展,同时也遵循所有的X/OpenUnix扩展。3b)其他重要函数库除glibc之外,流行的Linux发行版中还包含有一些其他的函数库,这些函数库具有重要地位,例如:GNULibtool:GNULibtool实际是一个脚本生成工具,它可以为软件包开发者提供一般性的共享库支持。以前,如果源代码包的开发者要利用共享库的优点,则必须为每个软件包可支持的平台编写定制的支持代码。并且还需要设计配置接口,以便软件包的安装程序能够正确选择要建立的库类型。利用GNULibtool,则可以简化开发者的这一工作。它在一个单独的脚本中同时封装了与平台相关的依赖性以及用户界面。GNULibtool可使每个宿主类型的完整功能可通过一般性的接口获得,同时为程序员隐藏了宿主的特殊性。GNULibtool一致性接口是可靠的,用户不必阅读那些晦涩的文档,以便在每个平台上建立共享库。他们只需运行软件包的配置脚本,而由libtool完成繁复的工作。CrackLib:CrackLib为用户提供了一个C语言函数接口,利用这一函数,可避免用户选择容易破解的密码。该函数库可在类似passwd的程序中使用。LibGTop:LibGTop是一个能够获取进程信息以及系统运行信息的函数库,这些信息包括:系统的一般信息、SYSVIPC限制、进程列表、进程信息、进程映射、文件系统使用信息等。图形文件操作函数库:包括libungif、libtiff、libpng、Imlib等,可分别用来操作GIF、TIFF、PNG以及其他一些格式图形文件。c)系统调用系统调用是操作系统提供给外部程序的接口。在C语言中,操作系统的系统调用通常通过函数调用的形式完成,这是因为这些函数封装了系统调用的细节,将系统调用的入口、参数以及返回值用C语言的函数调用过程实现。在Linux系统中,系统调用函数定义在glibc中。系统调用时需要注意如下几点:系统调用函数通常在成功时返回0值,不成功时返回非零值。如果要检查失败原因,则要判断errno这个全局变量的值,errno中包含有错误代码。许多系统调用的返回数据通常通过引用参数传递。这时,需要在函数参数中传递一个缓冲区地址,而返回的数据就保存在该缓冲区中。不能认为系统调用函数就要比其他函数的执行效率高。要注意,系统调用是一个非常耗时的过程。3、在线文档(man,info,HOW-TO等)a)manman,即manunal,是UNIX系统手册的电子版本。根据习惯,UNIX系统手册通常分为不同的部分(或小节,即section),每个小节阐述不同的系统内容。目前的小节划分如下:命令:普通用户命令4系统调用:内核接口函数库调用:普通函数库中的函数特殊文件:/dev目录中的特殊文件文件格式和约定:/etc/passwd等文件的格式手册页一般保存在/usr/man目录下,其中每个子目录(如man1,man2,...,manl,mann)包含不同的手册小节。使用man命令查看手册页。man命令行:man[-acdfFhkKtwW][-msystem][-pstring][-Cconfig_file][-Mpath][-Ppager][-Ssection_list][section]name常用命令行:$manopen$man7man$man./myman.3b)infoLinux中的大多数软件开发工具都是来自自由软件基金会的GNU项目,这些工具软件件的在线文档都以info文件的形式存在。info程序是GNU的超文本帮助系统。info文档一般保存在/usr/info目录下,使用info命令查看info文档。要运行info,可以在shell提示符后输入info,也可以在GNU的emacs中键入Esc-x后跟info。info帮助系统的初始屏幕显示了一个主题目录,你可以将光标移动到带有*的主题菜单上面,然后按回车键进入该主题,也可以键入m,后跟主题菜单的名称而进入该主题。例如,你可以键入m,然后再键入gcc而进进入gcc主题中。如果你要在主题之间跳转,则必须记住如下的几个命令键:*n:跳转到该节点的下一个节点;*p:跳转到该节点的上一个节点;*m:指定菜单名而选择另外一个节点;*f:进入交叉引用主题;*l:进入该窗口中的最后一个节点;*TAB:跳转到该窗口的下一个超文本链接;*RET:进入光标处的超文本链接;*u:转到上一级主题;*d:回到info的初始节点目录;*h:调出info教程;5*q:退出info。c)HOW-TO可供用户参考的联机文档的另一种形式是HOWTO文件,这些文件位于系统的/usr/doc/HOWTO目录下。HOWTO文件的文件名都有一个-HOWTO后缀,并且都是文本文件。每一个HOWTO文件包含Linux某一方面的信息,例如它支持的硬件或如何建立一个引导盘。要想查看这些文件,进入/usr/doc/HOWTO目录,使用more命令,具体形式如下:$cd/usr/doc/HOWTO;moretopic-name-HOWTO另外,HOWTO文档还有其他格式的文件,例如HTML和PS等,保存在/usr/doc/HOWTO/other-formats下。d)其他Linux的内核文档一般包含在内核源代码中,目录如下:/usr/src/linux-2.x.x/Documentation/usr/doc目录下包含有大量与特定软件或函数库相关的说明性文档。4、C语言编程风格如果你只是在编写一些小的练习程序,程序只有一两百行长的话,编程风格可能并不重要。然而,如果你和许多人一起进行开发工作,或者,你希望在过一段时间之后,还能够正确理解自己的程序的话,就必须养成良好的编程习惯。在诸多编程习惯当中,编程风格是最重要的一项内容。良好的编程风格可以在许多方面帮助开发人员。如果你阅读过Linux内核源代码的话,可能会对程序的优美编排所倾倒。良好的编程风格可以增加代码的可读性,并帮助你理清头绪。如果程序非常杂乱,大概看一眼就该让你晕头转向了。编程风格最能体现一个程序员的综合素质。匈牙利命名法定义了非常复杂的函数、变量、类型等的命名方法,典型的命名方法是采用大小写混写的方式,对于变量名称,则采用添加前缀的办法来表示其类型,例如:charszBuffer[20];intnCount;利用sz和n分别代表字符串和整数。为了表示一个变量名称,采用如下的变量名称是可能的:intiThisIsAVeryLongVariable;在Linux中,我们经常看到的是定义非常简单的函数接口和变量名称。UNIX系统的一个特点是设计精巧,并遵守积木式原则。C语言最初来自UNIX操作系统,与UNIX的设计原则一样,C语言被广泛认可和使用的一个重要原因是它的灵活性以及简洁性。因此,在利用C语言编写程序时,始终应当符合其简洁的设计原则,而不应当使用非常复杂的变量命名方法。Linus6为Linux内核定义的C语言编码风格要点如下:缩进时,使用长度为8个字符宽的Tab键。如果程序的缩进超过3级,则应考虑重新设计程序。大括号的位置。除函数的定义体外,应当将左大括号放在行尾,而将右大括号放在行首。函数的定义体应将左右大括号放在行首。如下所示:intfunction(in
本文标题:UNIX操作系统实验2
链接地址:https://www.777doc.com/doc-3368395 .html