By   Pure_OS项目组

200741

 

引言:在生活中,我们经常为了做一件事而花时间去做另一件事,就像我们为了装Linux而去学怎样使用VMware,让人觉得工作的重点转移啦。这次作业感觉上也还是这样。

作业要求:

          学习在Linux下的C编程

          要求编写代码:98Figure4.8的代码,编译,并运行。

          要求在完成以上步骤后,明白进程在forkexeclpwait 等函数参与下的执行过程。

作业分析:

这次作业说是操作系统,其实最难的还是程序开发环境的构建——在Linux下搭建能够像在Windows那样容易编程的开发环境,如Microsoft Visual Studio集成开发环境,然后学习如何在这个环境下编程,其次才是分析课本上代码及结果。

 

在这开始之前,让我们先回忆下程序编译的流程:编写代码——链接编译——运行。

那么我们在Linux下都哪些程序开发环境。据我们小组研究,主要有两种:一种是最原始的,按照程序的编译流程一步一步分开操作,一种是在一个集成环境下把编写链接运行都放在同一个环境下。

 

原始方法

首先我介绍下最原始的方法,同时也是最简单构建的方法,这种方法只要求你的Linux安装了GCC等开发工具。如果你在安装Linux时选择了程序开发选项,那么你的Linux就有了GCC等开发工具。

大概步骤

让我介绍下我们大概要执行的步骤,先用vi等文本工具编写C源文件,然后用GCC等编译工具编译我们的源程序输出可执行文件,最后在终端执行这个可执行文件。

终端

我们主要是在“终端(terminal)”中完成我们以上的几个动作。所以先讲下“终端”的一些入门知识。Linux都有“终端”,类似Windowscommand窗口。笔者用的是Fedora,点击 应用程序>附件>终端,即可,如图所示,

如图。在终端中有许多命令,在这我只介绍几个我们需要用到的命令。

 

ls –al

显示当前文件夹中的所有文件的属性,如图

 

chmod 755文件名

改变文件的权限,755表示让文件可以执行,当我新建一个源程序时,可能还只有读写的权限没有执行的权限。

 

./文件名

执行文件,这个命令是用来执行我们的写的程序的。

 

vi编辑器

由于我们需要在vi编写我们的程序,而vi的操作方式比较麻烦,所以我们有必要先介绍下vi的基本用法。

在终端中输入如下命令

vi HelloWorld.c

即可用vi新建或者编辑一个名为HelloWorld.c的文件,然后自动进入vi程序。在开始输入代码之前,最好先按下Insert键,表示以插入形式输入。然后输入我们输入的代码。最后我们要保存退出来,先按”Esc”键,按输入”:”(冒号),这时光标会自动跑到窗口最底部。再输入wq,按Enter就可以退出vi回到终端模式。这里w表示保存,q表示

退出。

然后在终端输入

ls –al

看下我们编写的程序HelloWorld的权限,如图。

可以看出HelloWorld的没有执行的权限,我们再输入

Chmod 755 HelloWorld.c

然后再输入

Ls –al

我们可以看到HelloWorld的属性变成可读写啦,同时颜色也变啦。如图

接着链接编译和执行的时候,输入

gcc HelloWorld.c

终端会自动链接编译HelloWorld生成一个叫a.out的文件

然后输入

./a.out

你可以看到输出

Hello,Pure_OS!

的字符,如图所示。

 

总结:这种方法基本上不用构建,但是写起程序来真的N麻烦。所以我们急需寻找其它方便点的开发环境,最好就像Windows下的Microsoft Visual Studio那样。于是我们项目组找到了这样一种方法,eclipse

Eclipse集成开发环境

介绍

Eclipse是由IBMBorland等资助的开源开发环境,就像Microsoft Visual Studio一样,将编写源程序,链接编译,执行都整合到同一个平台,不同的是它可以通过插件方式进行扩展,在这里我们将在Linux下构建C/C++的集成开发环境。执行Eclipse必须用到Java Development Kit(简称JDK),而Fedora(或Red Hat)发行套件中没有包含JDK所以需要先安装JDK。还有,要在Eclipse 上面开发C/C++程序,需要另外安装plug-ins,在此我们使用的是C/C++ Development ToolsCDT)。CDT 整合了gccmakegdbGUN 工具。

 

开发环境搭建方法

Eclipse有两种安装方式,一种是全自动的,一种是纯手工的。

 

全自动方法

全自动方法就是用yum命令。这种比较推荐初学者用,很容易。

yum是一种自动安装软件的命令,它是通过yum.repos.d文件中的软件库的地址,而在软件库中自动下载安装软件。它的最大一个好处是,能把某个软件的rpm包的关联包也一起下载(在Linuxrpm包最大一个问题是它可能有一些关联包,如果不事先下载安装这些包,是不能装该软件的)。

现在我来介绍以下具体的方法:

首先我们进入Linux操作系统,上ftp://202.116.77.31,从上面下载yum.repos.d.tgz到桌面。

然后打开终端,输入

mv yum.repos.d.tgz  /etc

(yum.repos.d.tgz移动到/etc目录)

cd /etc

tar –zxvf yum.repos.d.tgz

(解压缩)

上面两个步骤是把我们软件库的地址设为我们中大的一个ftp资源库上。

最后,在终端输入

yum install eclipse-platform.i386

(这个主要是下载安装eclipse 平台)

yum install eclipse-cdt.i386

(这个是下载安装cc++的)

 

纯手工搭建方法

但是有时下载的软件比较大,如果你Linux上设置的软件库是在他国的,那么安装的过程将会比较长,所以有时需要自己手动安装程序。我们组这两种方法都使用啦,杨逸文使用了自动安装,而我则使用了手工安装。下面讲解下怎样手动安装eclipse

 

一、准备工作:下载必要软件JDKeclipseCDT

下载eclipse你可以到官方网站

http://www.eclipse.org/downloads/

如图所示,

点击Eclipse SDK 3.2.2 ,进入镜像选择页面,选择一个你认为会比较快的镜像下载即可。笔者下载的版本的文件名是eclipse-SDK- 3.2.1 -linux-gtk.tar.gz

 

下载JDK你可以到Sun官方网站

http://java.sun.com/javase/downloads/index.jsp

下载最新版的JDK。笔者用的是jdk-6u1-linux-i586-rpm版,下载步骤如下:

在下载页面点击Java SE中的Java SE (JDK) 6进入版本选择页面,如图

点击6u1旁边的download,如图所示,

进入下载页面,选择accept,如图,再选择Linux Plaform-Java(TM)SE Development Kit 6Update 1中的Linux RPM in self-extracting file。如图

直接链接地址是

http://192.18.108.149/ECom/EComTicketServlet/BEGIN9BD4EB3FCB2275269063DD1CAFD3D606/-2147483648/2038239423/1/819170/818966/2038239423/2ts+/westCoastFSEND/jdk-6u1-oth-JPR/jdk-6u1-oth-JPR:3/jdk-6u1-linux-i586-rpm.bin

读者可以直接用迅雷下载这个链接。

请读者注意对照下你下载的文件名,你可能会发现笔者版本号6u1会不一样,有些版本号可能是 3.2.1 ,还有注意不要下载windows版本的,在文件名中应该有linux,不能有windows的字符。下载将这个文件放到/opt文件夹中。

 

下载CDT你可以到官方网站

http://www.eclipse.org/home/categories/languages.php

下载最新版的CDT

笔者使用的是org.eclipse.cdt- 3.1.2 -linux.x86.tar.gz。直接链接地址是

http://www.eclipse.org/downloads/download.php?file=/tools/cdt/releases/callisto/dist/3.1.2/org.eclipse.cdt-3.1.2-linux.x86.tar.gz

读者可以直接用迅雷下载这个链接。

 

、安装

1.cdt需要gcc等工具才能编程程序,所以要先确保你的Linux上安装了GCC等编译工具。

2.安装JDK

首先你需要以管理员的身份root进入Linux,否则可能没有权限安装程序。

打开终端,笔者用的是Fedora,点击 应用程序>附件>终端,即可,如图所示,

在终端输入

chmod x jdk-6u1-linux-i586-rpm.bin
./jdk-6u1-linux-i586-rpm.bin
如图所示

  
  

   
    
    
    

  
  

  
  

   
    
    
    

  
  

chmod +x 文件名

是改变文件的权限,以便文件可以执行。后面加文件名,即你下载的JDK文件名。

./文件名

表示执行某个文件。文件名同样为你下载的JDK文件名。

然后进入JDK的安装程序,开头它会让你读很长的一段文章,你只要一直按确定就行,直到有提示输入yes/or的提示出现,你输入yes后系统就会自动安装JDK。如图所示。

安装好的JDK 会存在 /usr/java/jdk 1.6.0 _01 目录中。如图所示

读者请注意,由于你下载的版本号可能与我的不同,你路径可能是/usr/java/j2sdk 1.4.0 _01,最后面的是版本号,请记住这个版本号,这是你安装的版本号。

 

接下来设定Java的环境变量,同样在终端输入

export JAVA_HOME = /usr/java/jdk-1_5_0_06

export PATH = $JAVA_HOME/bin:$PATH

CLASSPATH=.:/usr/java/jdk-1_5_0_06/lib/tools.jar:$CLASSPATH

export CLASSPATH

如图所示,

同样要注意在相应的地方更改成你的版号,例如在第一条命令最后的地方要更改成你的版式本号;在第三条命令中间有个地方有版本号,你需要改成你的版本号。

 

3.安裝Eclipse

在此笔者把Eclipse放在在 /opt 下,只要把下载回来的压缩包解压就可以了;解压后得到eclipse目录。笔者在图形界面下直接右击文件选择“解压到此处”,在/opt就会出现eclipse的文件夹。如图所示,

你可以进入这个文件夹直接点击eclipse图标 启动eclipseEclipse 安装好后,已经内建了java开发环境(JDT)就可以直接开发Java 程序。 但还不能开发C/C++程序。

4.安装CDT

解压缩CDT文件夹,会得到features plugins 这两个目录,分别将这两个目录中的所有文件分别剪到/opt/eclipse下的对应目录里。

最后再重新运行eclipse,你可以开发C/C++的程序啦!

 

eclipse如何开发C/C++程序

…………………………………………………………

程序分析

在这段程序中,我们最主要的是要了解fork()execlp()wait()函数的用法。最后通过对它们的了解,从而理解整个程序运行的过程。(这里会着重讲fork函数)

fork,是分叉的意思。也就是说,它会起到一个“分叉”的作用。在Unix操作系统中,常常会用它来产生新的进程。那调用fork到底会发生什么呢?首先,父进程会和子进程共用一段代码段,而数据段和堆栈段则会由父进程复制copy一份给子进程。当产生完毕,实际上父进程和子进程已经是两个独立的进程,特别是数据段是分开的(虽然一开始是一样的,但经过各自的操作后,是可以变得不同的),并不共享数据。

如果fork成功,子进程中fork的返回值是0,父进程中fork的返回值是子进程的进程号,如果fork不成功,父进程会返回错误。在这段程序代码,我们也许会产生误解。看到if-else结构,我们会以为这里分成3段,pid<0pid==0pid>0,当满足某一个条件时就会实现某一段程序。但实际并非如此。我们可以这样认为,如果没有wait函数,父进程和子进程是并行运行的,而且步调一致(至于真正谁运行先,就要看具体的操作系统)。在fork之后,它们进行不同的工作。而返回的pid,只是用来区分是父进程而是子进程。

再分析这段程序。当调用完fork之后,父进程会产生子进程,两个进程独立了。由于父进程用了wait函数,所以父进程会等子进程完成后再运行(此时并非前面所讲的并行运行)。而子进程此时会运行execlp函数,执行“/bin/ls”,ls”等命令。execlp的作用是在一个进程中运行另一个程序。我们可以这样理解,一个进程一旦调用exec类函数,它本身就死亡了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。

当子程序运行完后,父进程才printf(Child Complete)

 

 

 

 

 

还有另一种方法在:用yum命令。

yum是一种自动安装软件的命令,它是通过yum.repos.d文件中的软件库的地址,而在软件库中自动下载安装软件。它的最大一个好处是,能把某个软件的rpm包的关联包也一起下载(在Linuxrpm包最大一个问题是它可能有一些关联包,如果不事先下载安装这些包,是不能装该软件的)。

现在我来介绍以下具体的方法:

首先我们进入Linux操作系统,上ftp://202.116.77.31,从上面下载yum.repos.d.tgz到桌面。

然后打开终端,输入

mv yum.repos.d.tgz  /etc

(yum.repos.d.tgz移动到/etc目录)

cd /etc

tar –zxvf yum.repos.d.tgz

(解压缩)

上面两个步骤是把我们软件库的地址设为我们中大的一个ftp资源库上。

最后,在终端输入

yum install eclipse-platform.i386

(这个主要是下载安装eclipse 平台)

yum install eclipse-cdt.i386

(这个是下载安装cc++的)

 

 
Logo

更多推荐