附2 Linux环境编程.doc_第1页
附2 Linux环境编程.doc_第2页
附2 Linux环境编程.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

附: Linux环境编程实验目的(1) 理解系统调用和库函数的使用方法和格式;(2) 掌握进程控制相关的系统调用函数的原理、语法和编程应用;(3) 掌握Linux的C编译器GCC的使用方法。实验预备知识(1) 系统调用和库函数操作系统对外提供的服务可以通过不同的方式实现,其中两种基本的服务方式就是系统调用和库函数。系统调用 是操作系统提供的、与用户程序之间的接口,它一般位于操作系统核心的最高层。当CPU执行到用户程序中的系统调用(如使用read( )从文件中读取数据)时,处理机的状态就从用户态变为核心态,从而进入操作系统内部,执行它的有关代码,实现操作系统的对外服务。当系统调用完成后,控制返回到用户程序。库函数 现代计算机系统中,都有函数库,其中含有系统提供的大量程序。它们解决带共性的问题,并为程序的开发和执行提供更方便的环境。如C程序中常用的fopen()就是标准I/O库中的库函数。尽管它们很重要、也很有用,但它们本身并不属于操作系统的内核部分。一些库函数只是简化了用户与系统调用的接口。库函数要获得操作系统的服务也要通过系统调用这个接口。(2) 文本编辑器Gedit的使用方法与Windows的记事本操作类同。(3) C编译器GCC的使用参见实验提示。实验提示 一、Linux中的C语言编译器GCC的使用简介 Linux如同所有的UNIX系统一样是用C语言编写的。目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,是一种功能强大、性能优越的多平台编译器,能够编译用C、C+和Object C等语言编写的程序。借助GCC,由C源代码文件生成可执行文件的过程有4步,分别是与处理、编译、汇编和链接。不同的阶段分别调用不同的工具进行处理。(1) 预处理GCC调用预处理器cpp将预处理指令如#include、#define等所包含的文件内容插入程序代码中。(2) 编译GCC调用编译器将预处理后的文件进行编译,生成一个汇编语言的文件。(3) 汇编GCC调用汇编器as处理汇编文件,并生成一个以 .o为扩展名的目标文件。(4) 链接GCC调用链接器ld将程序中所用到的函数库连同目标文件链接,产生一个可执行文件。Red Hat Linux 9中已安装有3.2.2版本的GCC,安装的目录结构如下:/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/: GCC编译器所在目录。/usr/bin/gcc: 命令行执行编译的二进制程序所在位置。/usr/include/: 库和C语言加载的头文件所在目录。/usr/: 系统的库函数所在目录。/usr/lib/: 程序和子系统的函数库所在目录。1、使用GCC GCC基本用法是在Linux命令行下使用如下格式的命令:gcc 选项 源文件 目标文件 其中选项是参数,用来指定对其后给出的文件所执行的操作方式。当不用任何选项执行编译操作时,若编译成功,GCC将建立一个名为a.out的可执行文件。例:用任一文本编辑器(如vi、emacs、nedit等)创建名为test.c的文件,$ gedit test.c 在文件中输入以下内容。#include main(void) printf(“Hi!C!n”);执行如下命令:$ gcc test.c 在当前目录下产生一个名为a.out的文件。$ ./a.out 执行a.out。注意程序前面加上了”./”Hi!C! 程序输出的信息,即执行的结果GCC的选项繁多,以下仅列出几个常用的选项,并作分类说明。其他选项可参考linux的man page在线说明。2、GCC选项GCC常用的选项说明如下:-o file:编译产生的文件以指定文件名保存。如果file没有指定,默认文 件名为a.out。$ gcc test.c o test 在当前目录下产生一个名为test的文件。$ ./ test实验内容与实验步骤1、 编辑并运行下列代码,理解fork函数的执行原理。下面的示例说明如何使用有关进程操作的系统调用。每个进程都有唯一的进程ID号(PID)。PID通常在数值上逐渐增大。因此,子进程的ID一般要比父进程大。当然,PID的值不可能无限大,当它超过系统规定的最大值时,就反转回来使用最小的尚未使用的PID值。如果父进程死亡或退出,则子进程就会被指定一个新的父进程init(其PID为1)。本程序利用fork()创建子进程,利用getpid()和getppid()分别获得进程的PID和父进程PID。使用sleep()将相关进程挂起几秒钟。/*演示有关进程操作#include#include#include#includeint main(int argc,char *argv) pid_t pid,old_ppid,new_ppid; pid_t child,parent; parent=getpid(); /*获得本进程的PID*/ if (child=fork()0) fprintf(stderr,%s:fork of child failed:%sn,argv0,strerror(errno); exit(1); else if(child=0) /*此时是子进程被调度运行*/ old_ppid=getppid(); sleep(2); new_ppid=getppid(); else sleep(1); exit(0); /*父进程退出*/ /*下面仅子进程运行*/ printf(Original parent:%dn,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论