Linux程序实验

更新时间:2023-09-22 06:01:01 阅读量: 工程科技 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《Linux程序设计》教学大纲

Linux Program Design

课程类别:学科专业教育课程 课程名称:Linux程序设计 开课单位:软件学院课程编号:N03140112 总 学 时:32 学 分:2 适用专业:软件工程 先修课程:程序设计基础

一、课程在教学计划中的地位、作用

通过讲授Linux的操作使用、系统结构和Linux环境下的程序设计,使学生对Linux操作系统获得一个全面的认识和掌握。一方面,学生通过学习系统程序设计,能够复习操作系统中的基本概念,对文件管理、进程控制有更深入的理解;另一方面,学生学会在Linux环境下工作,进一步熟悉C语言程序设计和数据结构的知识,编写进行系统维护的脚本文件和实用化的大型应用程序,如网络应用程序。同时,本课程为学生进一步学习其它后续课程(如高级操作系统、Linux内核源代码分析、嵌入式系统等)打下基础。 二、课程内容、基本要求

第一章 linux基础

1、了解什么是Linux,UNIX和Linux的历史,Linux/UNIX的系统结构; 2、掌握Linux的基本命令和操作使用,Linux程序设计的预备知识。 第二章 Shell程序设计 1、了解什么是shell;

2、掌握创建和执行Shell脚本,Shell程序设计的语法。 第三章 Linux系统程序设计(一)文件操作与文件管理

1、掌握Linux文件系统的实现,系统调用和标准I/O库,文件属性目录的实现和操作,系统数据文件,文件锁,高级I/O。

第四章Linux下简单的C程序设计 1、掌握GCC的使方法

2、掌握在linux下编写基本C程序。

第五章 Linux系统程序设计(二):进程控制和进程间通信 1、了解进程的概念;

2、掌握Linux中的进程和进程环境,进程控制,进程间的关系,信号,daemon进程,进程间通信,线程。

第六章 Linux网络程序设计

1、了解TCP/IP基础知识,什么是socket,socket编程,远程过程调用。 2、掌握Linux平台数据结构的传送方法。 三、实验

实验一 Linux基本命令的使用 1、学会并掌握linux的基本命令 实验二 Shell程序设计

1、 Shell程序设计中变量的使用;

2、 理解通道的概念并初步掌握它的使用方法; 3、 掌握算术操作、字符串操作、逻辑操作、文件操作; 4、 掌握if then fi、if then elif fi、case、while、for等控制语句; 5、 在shell脚本中使用函数 实验三文件操作与文件管理 1、 熟悉Linux下常用的操作指令。

2、 加深对文件,目录,文件系统等概念的理解。 3、 掌握Linux文件系统的目录结构。 4、 掌握有关Linux文件系统操作的常用命令。 5、 了解有关文件安全方面的知识。 实验四 Linux下简单的C程序设计

1、了解并掌握GCC等Linux的开发调试环境。

2、掌握使用标准C的文件操作函数和Linux的系统调用。 实验五 进程控制和进程间通信

1、理解和掌握UNIX和Linux进程通信系统调用的功能 实验六 网络程序设计 1、 理解Socket概念;

2、 理解并掌握Socket模型下获得本机IP信息的方法; 3、 理解并发服务器模型,掌握通用套接字开发技术; 4、 掌握Linux平台数据结构的传送方法。 四、学时分配

章节名称 第一章linux基础 第二章Shell程序设计 第三章 Linux系统程序设计(一)文件操作与文件管理 讲授(学时) 实验(学时) 3 2 2 2 2 2 小计 5 4 4 第四章Linux下简单的C程序设计 第五章 Linux系统程序设计(二):进程控制和进程间通信 第六章 Linux网络程序设计 共计 4 4 5 20 2 2 2 12 6 6 7 32 五、主要参考书 《Linux环境C程序设计》、《linux简明教程》、《linux基础教程》

六、考核方式(包括作业、测验、考试等及其所占比例)

考试:60% 实验:30%平时:10%

《Linux程序设计》实验大纲

Linux Program Design

课程类别:学科专业教育课程 课程名称:Linux程序设计 开课单位:软件学院课程编号:N03140112 总 学 时:32 学 分:2 适用专业:软件工程 先修课程:程序设计基础 一、实验教学目标

熟练掌握shell编程、熟练使用linux系统、掌握进程控制和进程间通信,学会编写网络程序,学会在linux环境中编写web程序。养成一种良好的程序设计风格。 二、实验环境 Linux

三、实验教材及参考书: [1] 实验指导书(自编讲义)

[2]《Linux环境C程序设计》徐诚高莹婷等清华大学出版社2010.1 [3]《linux入门到精通》刘忆智清华大学出版社2010.1 四、实验成绩评定方式

根据学生在实验过程中的认真程度、上机结果验收情况以及实验报告撰写质量,进行综

合评定。

五、实验项目及学时分配

序号 实验名称 实验类别 学时数 备注 1 2 3 4 5 6 Linux基本命令的使用 Shell程序设计 文件操作与文件管理 Linux下简单C程序设计 进程控制和进程间通信 网络程序设计 验证型 设计型 验证型 验证型 设计型 验证型 2 2 2 2 2 2

六、实验内容及要求

实验一 Linux基本命令的使用 1、实验目的

(1)学习和掌握Linux的基本命令 (2)增强学生对Linux的学习兴趣 2、实验内容

(1)linux的登录操作 (2)常用基本命令的使用 实验二 Shell程序设计 1、实验目的

(1).Shell程序设计中变量的使用;

(2).理解通道的概念并初步掌握它的使用方法; (3).掌握算术操作、字符串操作、逻辑操作、文件操作; (4).掌握if then fi、if then elif fi、case、while、for等控制语句; (5).在shell脚本中使用函数;

2、实验内容 (1).通过对shell程序的调试,理解变量$#,$0,$1,$2,$3,$@的含义; (2).Shell顺序程序设计;

(3).Shell分支程序与多分支程序设计; (4).Shell循环程序设计。 实验三文件操作与文件管理

1、实验目的 (1).熟悉Linux下常用的操作指令。

(2).加深对文件,目录,文件系统等概念的理解。 (3).掌握Linux文件系统的目录结构。 (4).掌握有关Linux文件系统操作的常用命令。 (5).了解有关文件安全方面的知识。 2、实验内容

Linux文件系统操作的常用命令。 实验四Linux下简单C程序设计

1、实验目的

(1)学习和掌握gcc等Linux的开发调试环境。

(2)学会在Linux下编写C程序。 2、实验内容

(1)学习GCC编译程序

(2)学习并分别使用标准C的文件操作函数和Linux的系统调用创建一个对学生基本信息进行操作(插入、修改和删除)的C程序。 实验五进程控制和进程间通信

1、实验目的

为了理解和掌握UNIX和Linux进程通信系统调用的功能,这里给出了进程通信实现机制中使用的系统调用命令的格式和如何利用系统调用命令进行进程通信编程,以便通过学习,提高学生对进程通信系统调用的编程能力。

2、实验内容

编写一个有名管道程序。一个(客户)进程从键盘循环读一系列字符,将这些字符和发送者的pid发给服务器进程,让其统计输入的是字符还是数字,分别为多少个,完成后再向客户进程发回服务的结果,由客户进程输出。 实验六网络程序设计 1、实验目的

(1).理解Socket概念;

(2).理解并掌握Socket模型下获得本机IP信息的方法; (3).理解并发服务器模型,掌握通用套接字开发技术; (4).掌握Linux平台数据结构的传送方法。 2、实验内容

(1).编写获得本机IP信息的程序;

(2).编写基于并发服务器模式的网络通信原型系统;

(3).要求至少综合使用到实验目的中提到的三条或三条以上内容。

《Linux程序设计》实验指导书

实验类别: 课内实验 实验课程名称: Linux程序设计 实验室名称:软件工程专业实验室实验课程编号: N03140112 总 学 时: 32 学分: 2 适用专业: 软件工程

先修课程: Linux操作系统、C程序设计

实验在教学培养计划中地位、作用:

通过讲授Linux的操作使用、系统结构和Linux环境下的程序设计,使学生对Linux操作系统获得一个全面的认识和掌握。一方面,学生通过学习系统程序设计,能够复习操作系统中的基本概念,对文件管理、进程控制有更深入的理解;另一方面,学生学会在Linux环境下工作,进一步熟悉C语言程序设计和数据结构的知识,编写进行系统维护的脚本文件和实用化的大型应用程序,如网络应用程序。同时,本课程为学生进一步学习其它后续课程(如高级操作系统、Linux内核源代码分析、嵌入式系统等)打下基础。

实验一Linux基本命令的使用

1、实验目的

(1)学习和掌握Linux的基本命令 (2)增强学生对Linux的学习兴趣 2、实验内容

(1)linux的登录操作 (2)常用基本命令的使用 3、实验要求

(1)实验前认真预习实验内容,详细了解本实验所涉及到的相关理论知识。 (2)填写完整的实验报告。 4、实验步骤

步骤1:以user_login用户身份并使用telnet登录Linux服务器,按照提示创建自己的账户和口令。

步骤2:使用新创建的用户账户和口令登录Linux系统,察看登录后的界面。

步骤3:使用pwd命令察看当前的工作目录,然后用ls命令查看当前目录下的内容,尝试使用-a,-l,-F,-A,-lF等不同选项并比较不同之处。

步骤4:在当前目录下建立一个名为test的新目录,然后将工作目录切换到test下,尝试将/etc目录下的文件passwd拷贝到该目录下(cp 源文件目的目录)。察看当前目录下的passwd文件的属主和文件权限。

步骤5:尝试向当前目录下的passwd文件和/etc/passwd文件分别写入一些新内容(可使用echo “字符串”>>文件的命令),看看操作能否成功,如果不能成功,请说明原因。用cat命令浏览文件password的内容,用more命令进行浏览翻页操作,再用less命令浏览文件的内容。比较这几个命令的不同之处。

步骤6:用ls命令查看test下文件的权限,用mv命令更改文件password的文件名为test.txt,尝试用chown和chgrp更改文件的属主为root、组为root,看看能否成功,不成功,请说明原因。尝试用chomd将文件权限为“-rw-------”。看看能否成功,不成功,请说明原因。

步骤7:用rm命令删除test目录下的所有文件,再用rmdir命令删除test目录。(想一想有没有一条命令将目录及目录下的所有文件删除,写出这条命令)

步骤8:使用ps命令查看当前系统内的进程,并利用man命令获取ps命令的参数,写出获取当前终端进程执行情况的ps命令。

步骤9:使用df命令查看当前系统已安装的文件系统的空间使用情况,记录结果。 步骤10:使用du命令查看用户的工作目录占用了多少空间,记录结果。 步骤11:使用free命令查看内存资源的使用情况,记录结果。

实验二 Shell程序设计

1、实验目的

(1).Shell程序设计中变量的使用;

(2).理解通道的概念并初步掌握它的使用方法;

(3).掌握算术操作、字符串操作、逻辑操作、文件操作;

(4).掌握if then fi、if then elif fi、case、while、for等控制语句; (5).在shell脚本中使用函数; 2、实验内容

(1).通过对shell程序的调试,理解变量$#,$0,$1,$2,$3,$@的含义; (2).Shell顺序程序设计;

(3).Shell分支程序与多分支程序设计; (4).Shell循环程序设计。 3、实验要求

(1)实验前认真预习实验内容,详细了解本实验所涉及到的相关理论知识。 (2)填写完整的实验报告。

4、实验步骤

1 vi的使用

步骤1:以root用户身份登录进入Linux 系统。 步骤 2:启动Vi,切换到输入模式,输入一段英文:

This ia an exercise! We use Vi to edit it. Left,down,up,right

步骤3:尝试匹配其中的一串字符,写出这命令及执行结果。

/use

步骤4:尝试替换其中的一串字符,写出这命令及执行结果。 :s/This/aaa This/g

步骤5:尝试复制/删除其中的一行或几行文本,写出命令及执行结果。 Yy2p

dd

步骤6:尝试复制/删除其中的一个单词或几个字符,写出命令及执行结果。 3ywp

dw

x

步骤7:尝试使用鼠标复制文本,写出命令及执行结果。 输入模式下:复制粘贴

步骤8:尝试存盘退出操作,写出命令。

:wq newname

ls

可以用的命令:wq 或:x

2.2 简单的shell程序

步骤1:使用Vi将程序清单2-1的程序输入。

步骤 2:尝试运行该程序,如果不能运行,原因是什么,怎样修改。

步骤3:执行程序,写出程序的执行结果。

步骤4:阅读程序,掌握shell函数的编写方法,补全函数file_run。 for i in `ls` do

if test -x $i;then echo $i fi done

步骤5:修改程序中的函数uers(),使得显示在线用户时不分行。(提示:可以使用循环,对每个在线用户分别处理。

echo \for i in \do

echo -n $i echo -n\done

程序清单

清单2-1 menu # !/bin/bash

MYDATE=`date +%d/%m/%y` THIS_HOST=`hostname -s` USER=`whoami`

file_run() {

# !/bin/bash

for i in `ls` do

if test -x $i;then echo $i fi done

} uers() {

# !/bin/bash

echo \echo -e \} while : do

tput clear cat<

Host:$THIS_HOST

Date:$MYDATE

--------------------------------------------------------------------- User:$USER aaa aaa ;;

Q|q) exit 0 ;;

*) echo -e \;; esac

echo -e -n \read CHOICE case $CHOICE in

1) ls -l|awk '/^d/ {print $8}' ;;

2) file_run ;; 3) uers ;; H|h) cat<

---------------------------------------------------------------------

1 : List subdirectory in current directory 2 : List files in current directory which can run 3 : See who is on the system H : Help screen Q : Exit Menu

--------------------------------------------------------------------

This is the help screen,nothing here yet to help you!

echo -e -n \read DUMMY

done

实验三文件操作与文件管理

1、实验目的

(1).熟悉Linux下常用的操作指令。

(2).加深对文件,目录,文件系统等概念的理解。 (3).掌握Linux文件系统的目录结构。

(4).掌握有关Linux文件系统操作的常用命令。 (5).了解有关文件安全方面的知识。 (2)

2、实验内容

Linux文件系统操作的常用命令。

3、实验要求

(1)实验前认真预习实验内容,详细了解本实验所涉及到的相关理论知识。 (2)填写完整的实验报告。 4、实验步骤

1.浏览文件系统

〈1〉运行pwd命令,确定你当前的工作目录。

〈2〉利用以下命令显示当前工作目录的内容:(理解各字段彻底意义。) 〈3〉运行以下命令:(反馈信息中.代表本身目录,..代表其父目录;选项a可以显示隐藏文件;选项i可以显示文件的I节点号)

ls –ai

〈4〉使用mkdir命令建立一个子目录subdir,并用ls查看当前目录。

〈5〉使用带-d选项的ls命令,你只能看到有关子目录的信息(.表示本身目录)。

if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(structsockaddr))==-1) {

fprintf(stderr,\exit(1); }else{

printf(\}

/*连接成功*/

memset(buffer,0,BUFFLEN);

strcpy(buffer,\学生姓名的全拼\send(sockfd,buffer,strlen(buffer),0); memset(buffer,0,BUFFLEN);

n = recv(sockfd,buffer,BUFFLEN,0); if(n>0) {

printf(\}

/*结束通讯*/ close(sockfd); exit(0);

}

(2)在终端窗口中对程序进行编译。命令如下:

make tcpclient如无错误,将会产生tcpclient可执行文件,两次运行./tcpclient,第一次给出一个错误的服务器端IP地址或端口号,观察本机错误提示信息,验证TCP为可靠连接方式;第二次给出正确的服务器IP地址和端口号,观察教师机服务端。 3、简易Web服务器

设计一个简易Web服务器程序,端口为80,该服务器程序运行后可通过浏览器访问到一个简易Web页面,页面主要信息为本人“学号+姓名”。可同学之间互相访问验证。 (1)编写代码。简易Web服务器参考程序websvr.c: /*简易Web服务器程序*/ #include #include #include #include #include #include #include #include #define PORT 80 #define BACKLOG 10 #define LENGTH 1024

char httpweb[]={

\

\\

\

\

\char web[]={ \\\演示网页 \\r\\n\

\\

\WEBSERVER\\r\\n\

\

// \将此修改 为本人学号+姓名\\r\\n\

\学生\\r\\n\\\};

int main (){ int sockfd;

// Socket file descriptor int nsockfd;

// New Socket file descriptor int i,num; int flag= 1;

int sin_size;

// to store struct size char revbuf[LENGTH];

struct sockaddr_in addr_local; struct sockaddr_in addr_remote;

/* Get the Socket file descriptor */

if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ) { printf (\return (0);} else {

printf (\}

/* Fill the local socket address struct */ addr_local.sin_family = AF_INET; // Protocol Family

addr_local.sin_port = htons(PORT); // Port number

addr_local.sin_addr.s_addr = INADDR_ANY; // AutoFill local address

bzero(&(addr_local.sin_zero), 8);

// Flush the rest of struct /* Blind a special Port */

if( bind(sockfd, (struct sockaddr*)&addr_local, sizeof(struct sockaddr)) == -1 ) {

printf (\return (0); } else {

printf(\PORT); }

/* Listen remote connect/calling */

if(listen(sockfd,BACKLOG) == -1) {

printf (\return (0); } else {

printf (\}

while(1){

sin_size = sizeof(struct sockaddr_in);

/* Wait a connection, and obtain a new socket file despriptor for single connection */

if ((nsockfd = accept(sockfd, (struct sockaddr *)&addr_remote, &sin_size)) == -1){

printf (\error\\n\

continue; } else {

printf (\inet_ntoa(addr_remote.sin_addr)); }

num = recv(nsockfd, revbuf, LENGTH, 0); /* Child process */

if(!vfork()) {

printf(\send(nsockfd, httpweb, strlen(httpweb), 0); send(nsockfd, web, strlen(web), 0); }

close(nsockfd);

while(waitpid(-1, NULL, WNOHANG) > 0); printf(\}

close(sockfd); }

(2)编译程序:make websvr

(3)运行程序:./websvr (4)打开浏览器(例如IE),输入IP地址,查看效果。

本文来源:https://www.bwwdw.com/article/37uh.html

Top