Linux程序设计实验指导书.doc

上传人:飞****2 文档编号:52216083 上传时间:2022-10-21 格式:DOC 页数:55 大小:1.41MB
返回 下载 相关 举报
Linux程序设计实验指导书.doc_第1页
第1页 / 共55页
Linux程序设计实验指导书.doc_第2页
第2页 / 共55页
点击查看更多>>
资源描述

《Linux程序设计实验指导书.doc》由会员分享,可在线阅读,更多相关《Linux程序设计实验指导书.doc(55页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、LIAOCHENG UNIVERSITYLinux程序设计实验指导书聊城大学计算机学院2011年3月目录Linux程序设计课程实验教学大纲1实验一Linux常用命令3基本信息3实验预习3实验过程3实验结果分析7实验二Linux环境下系统函数的使用8基本信息8实验预习8实验过程8实验三Linux下文件程序设计13基本信息13实验预习13实验过程13实验结果分析23实验四进程控制23基本信息23实验预习23实验过程23实验结果分析28实验五进程通信28基本信息28实验预习28实验过程28实验结果分析34实验六网络程序设计(1)35基本信息35实验预习35实验过程35实验结果分析40实验七网络程序设

2、计(2)40基本信息40实验预习41实验过程41实验结果分析46实验八综合实验46基本信息46实验预习47实验过程47实验结果分析52Linux程序设计课程实验教学大纲课程名称:Linux程序设计英文名称:Linux Programming设置形式:非独立设课课程模块:专业提高课实验课性质:专业实验课程编号:课程负责人:李俊青大纲主撰人:李俊青大纲审核人:左风朝一、学时、学分 课程总学时:64实验学时:16课程学分:2二、适用专业及年级软件工程、计算机科学与技术二、三年级三、课程目标与基本要求通过课程学习,掌握Linux系统安装、文件操作基本命令、系统管理基本命令、服务器配置基本命令,系统学习

3、Linux平台下C语言编程技术,主要包括:系统函数的使用、文件的基本操作、进程管理、守护进程、僵尸进程和进程间通信(包括:信号、管道、共享内存等)、网络编程、Linux下数据库的使用和管理编程技术。通过实验部分的学习,熟练掌握Linux系统平台编程技术和能力,独立开发小型综合系统能力。四、主要仪器设备 硬件:台式计算机、网络;软件:Linux操作系统。五、实验项目及教学安排序号实验项目名称实验基本方法和内容项目 学时项目类型每组人数教学 要求1Linux常用命令学习使用Linux基本文件操作命令、系统管理命令、服务器配置命令等2验证型1必修2Linux环境下系统函数的使用Linux环境下数学函

4、数、字符函数、系统时间与日期函数、环境控制函数、内存分配函数、数据结构中常用函数的使用方法2验证型1必修3文件的操作Linux系统的文件属性、不带缓存的文件I/O操作、基于流的文件I/O操作、特殊文件的操作2验证型1必修4进程控制进程的基本概念及进程的结构、Linux环境下进程的相关函数的应用 守护进程的概念、启动和建立 进程控制程序的编写 2验证型1必修5进程通信进程通信中信号概念及信号处理 进程间的管道通信编程 进程间的内存共享编程2验证型1必修6网络程序设计(1)Socket的基本概念 如何实现面向连接的TCP编程 2验证型1必修7网络程序设计(2)如何实现非连接的UDP编程 复杂网络程

5、序的实现2验证型1必修8综合实验综合文件、进程、网络编程技术,编写网络聊天系统,系统具备文件共享、进程管理、网络通信、界面友好等特点2设计型1必修六、考核方式及成绩评定根据学生实验出勤情况、实验态度、实验报告成绩等评定实验成绩。 实验报告(含实验理论)占实验成绩的60%40%,实验技能(含实验态度)占实验成绩的40%60%。 各次实验成绩的平均值为最终实验成绩,占该课程考核总成绩的2030%。七、实验教科书、参考书1实验教科书自编实验指导书。 2实验参考书实验一Linux常用命令基本信息实验课程:Linux程序设计 设课形式:非独立课程学分:2实验项目:Linux常用命令项目类型:验证项目学时

6、:2实验预习实验目的和要求:1、熟悉Linux常用命令;2、掌握Linux命令参数。实验条件:1、装有Linux操作系统的微型计算机;实验过程(1)指令名称:pwd pwd命令也是最常用最基本的命令之一,用于显示用户当前所在的目录。 (2)指令名称:cd cd命令不仅显示当前状态,还改变当前状态,它的用法跟dos下的cd命令基本一致。 cd .可进入上一层目录 cd -可进入上一个进入的目录 cd 可进入用户的home目录(3)指令名称:cp 使用方式: cp options source dest cp options source. directory 说明:将一个档案拷贝至另一档案,或将

7、数个档案拷贝至另一目录。 范例: 将档案 aaa 复制(已存在),并命名为 bbb : cp aaa bbb 将所有的C语言程式拷贝至 Finished 子目录中 : cp *.c Finished(4)名称:mv 使用方式:mv options source dest mv options source. directory 说明:将一个档案移至另一档案,或将数个档案移至另一目录。 参数:-i 若目的地已有同名档案,则先询问是否覆盖旧档。 范例: 将档案 aaa 更名为 bbb : mv aaa bbb 将所有的C语言程序移至 Finished 子目录中 : mv -i *.c /Finis

8、hed(5)指令名称 : chmod 使用方式 : chmod -cfvR -help -version mode file. 说明 : Linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所存取。 mode : 权限设定字串,格式如下 : ugoa.+-=rwxX.,.,其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。 + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子

9、目录或者该档案已经被设定过为可执行。范例 :将档案 file1.txt 设为所有人皆可读取 : chmod ugo+r file1.txt 将档案 file1.txt 设为所有人皆可读取 : chmod a+r file1.txt 将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 : chmod ug+w,o-w file1.txt file2.txt 将 ex1.py 设定为只有该档案拥有者可以执行 : chmod u+x ex1.py 将目前目录下的所有档案与子目录皆设为任何人可读取 : chmod -R a+r *

10、 此外chmod也可以用数字来表示权限如 chmod 777 file 语法为:chmod abc file 其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。r=4,w=2,x=1 若要rwx属性则4+2+1=7; 若要rw-属性则4+2=6;若要r-x属性则4+1=7。范例: chmod a=rwx file 和 chmod 777 file 效果相同 chmod ug=rwx,o=x file 和 chmod 771 file 效果相同 若用chmod 4755 filename可使此程式具有root的权限(6)指令名称 : ls 使用方式 : ls -alr

11、tAFR name. 说明 : 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。 范例: 列出目前工作目录下所有名称是 s 开头的档案,愈新的排愈后面 : ls -ltr s* 将 /bin 目录以下所有目录及档案详细资料列出 : ls -lR /bin 列出目前工作目录下所有档案及目录;目录于名称后加 /, 可执行档于名称后加 * : ls -AF (7)指令名称:rm 使用方式:rm options name. 说明:删除档案及目录。 范例:删除所有C语言程式档;删除前逐一询问确认 : rm -i *.c 将 Finished 子目录及子目录中所有档案删除 : rm -r

12、Finished (8)指令名称:rmdir 使用方式: rmdir -p dirName 说明: 删除空的目录。 参数: -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。 范例: 将工作目录下,名为 AAA 的子目录删除 : rmdir AAA 在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。 rmdir -p BBB/Test (9)指令名称:touch 使用方式: touch -acfm -r reference-file -file=reference-file -t MMDDhhmmCCY

13、Y.ss -d time -date=time -time=atime,access,use,mtime,modify-no-create -help -version file1 file2 . 说明:touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。范例: 最简单的使用方式,将档案的时候记录改为现在的时间。若档案不存在,系统会建立一个新的档案。touch file touch file1 file2 将 file 的时间记录改为 5 月 6 日 18 点 3 分,公元两千年。时间的格式可以参考 date 指令,至少需输入 MMDDHHmm ,就是月日时与分。 tou

14、ch -c -t file touch -c -t 0 file 将 file 的时间记录改变成与 referencefile 一样。 touch -r referencefile file 将 file 的时间记录改成 5 月 6 日 18 点 3 分,公元两千年。时间可以使用 am, pm 或是 24 小时的格式,日期可以使用其他格式如 6 May 2000 。 touch -d 6:03pm file touch -d 05/06/2000 file touch -d 6:03pm 05/06/2000 file (10)指令名称:gzip 说明:gzip命令用于压缩文件。 参数 : -

15、d 将压缩文件解压范例:如果要将ye.txt文件压缩,可用如下命令: gzip ye.txt 这样就可以压缩文件并在文件名后面加上gz扩展名,变成文件ye.txt.gz。 解压缩文件可用gzip -d命令实现: gzip -d ye.txt.gz 这样就可以解压缩文件并删除gz扩展名。(11)指令名称:tar 说明:tar可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于

16、备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。范例:可用如下方法建立tar档案: tar cvf 例如,如果要将当前目录中所有文件存档到ye.tar中,可用如下命令: tar cvf ye.tar *.* 要浏览档案内容,将c选项变成t。如果要浏览ye.tar档案中的内容,可用如下命令: tar tvf ye.tar 要取出档案内的内容,将c选项变成x。如果要将ye.tar档案中的内容取到当前目录中,可用如下命令: tar xvf ye.tar新版的tar可以直接访问和建立gzip压缩的tar档案,只要在tar命令中加上z 选项就可以了。例如: 生成压缩档案ye.tar.gz

17、 :tar czvf ye.tar *.txt 显示压缩档案ye.tar.gz的内容:tar tzvf ye.tar *.txt 取出压缩档案ye.tar.gz的内容:tar xzvf ye.tar *.txt (12)指令名称:mail 使用方式:mail -iInv -s subject -c cc-addr -b bcc-addr user1 user 2 . 说明: mail 不仅只是一个指令, mail 还是一个电子邮件程序。参数:s 邮件标题 c 邮件地址 (2个地址以上用,一个地址不用加此参数)范例: 将信件送给一个或以上的电子邮件地址,由于没有加入其他的选项,使用者必须输入标题

18、与信件的内容等。mail user01系统会提示输入“subject”将 mail.txt 的内容寄给yzhu ,同时抄送给rootmail -s “标题” -c yzhu root mail.txt 接收到的邮件都保存在目录 /var/spool/mail/用户名(13)指令名称 : wall 使用方式 :wall message 使用说明: wall 会将讯息传给每一个 mesg 设定为 yes 的上线使用者。例子 :传讯息hi 给每一个使用者 : wall hi实验结果分析1、熟悉并记录命令执行结果。2、写出自己的心得体会。实验二Linux环境下系统函数的使用基本信息实验课程:Linux

19、程序设计 设课形式:非独立课程学分:2实验项目:Linux环境下系统函数使用项目类型:验证项目学时:2实验预习实验目的和要求:Linux环境下数学函数的使用方法Linux环境下字符函数的使用方法Linux环境下系统时间与日期函数的使用方法Linux环境下环境控制函数的使用方法Linux环境下内存分配函数的使用方法Linux环境下数据结构中常用函数的使用方法实验条件:1、装有Linux操作系统的微型计算机;实验过程数学函数的使用系统时间与日期函数的使用环境控制函数内存分配函数实验三Linux下文件程序设计基本信息实验课程:Linux程序设计 设课形式:非独立课程学分:2实验项目:Linux下文件

20、程序设计项目类型:验证项目学时:2实验预习实验目的和要求:1、函数编写与函数参数的传递 2、多文件系统 3、多文件系统中使用4、make 使用autotools实验条件:1、装有Linux操作系统的微型计算机;实验过程步骤 2:分析程序、分割文件将此程序分割成下列2个Linux c程序。(1)2-3-main.c为主程序步骤 2:用gcc编译程序rootlocalhost root#gcc 2-4-main.c 2-4-max.c o 2-4步骤 3:运行程序rootlocalhost root#./2-4 3. Make实验在一个Makefile文件中通常包含如下内容:需要由make工具创建

21、的目标体(target),通常是目标文件或可执行文件。要创建的目标所依赖的文件。创建每个目标体时需要运行的命令。4. makefile变量的使用Linux文件类型Linux文件权限文件的创建文件的读写操作文件上锁流文件的打开和关闭文件的定位目录文件的操作链接文件的操作实验结果分析1、熟悉并记录命令执行结果。2、写出自己的心得体会。实验四进程控制基本信息实验课程:Linux程序设计 设课形式:非独立课程学分:2实验项目:进程控制项目类型:验证项目学时:2实验预习实验目的和要求:进程的基本概念及进程的结构Linux环境下进程的相关函数的应用守护进程的概念、启动和建立进程控制程序的编写实验条件:1、

22、装有Linux操作系统的微型计算机;实验过程Liunx进程创建僵尸进程守护进程实验结果分析1、熟悉并记录程序执行结果。2、写出自己的心得体会。实验五进程通信基本信息实验课程:Linux程序设计 设课形式:非独立课程学分:2实验项目:进程通信项目类型:验证项目学时:2实验预习实验目的和要求:进程通信中信号概念及信号处理进程间的管道通信编程进程间的内存共享编程实验条件:1、装有Linux操作系统的微型计算机;实验过程信号操作的相关函数管道低级管道操作命名管道消息队列共享内存实验结果分析1、熟悉并记录程序执行结果。2、写出自己的心得体会。实验六网络程序设计(1)基本信息实验课程:Linux程序设计

23、设课形式:非独立课程学分:2实验项目:网络程序设计(1)项目类型:验证项目学时:2实验预习实验目的和要求:Socket的基本概念如何实现面向连接的TCP编程如何实现非连接的TUDP编程复杂网络程序的实现实验条件:1、装有Linux操作系统的微型计算机;实验过程客户端#include#include #include #include #include #include #include #include #define SERVPORT 3333#define MAXDATASIZE 100 /*每次最大数据传输量 */int main(int argc, char *argv)int soc

24、kfd, recvbytes;char bufMAXDATASIZE;struct hostent *host;struct sockaddr_in serv_addr;if (argc h_addr);bzero(&(serv_addr.sin_zero),8);if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr) = -1) perror(connect error!);exit(1);if (recvbytes=recv(sockfd, buf, MAXDATASIZE, 0) =-1) pe

25、rror(connect 出错!);exit(1);bufrecvbytes = 0;printf(收到: %s,buf);close(sockfd);服务器端#include#include#include#include #include #include #include #include #define SERVPORT 3333 /*服务器监听端口号 */#define BACKLOG 10 /* 最大同时连接请求数 */int main()int sockfd,client_fd; /*sock_fd:监听socket;client_fd:数据传输socket */struct s

26、ockaddr_in my_addr; /* 本机地址信息 */struct sockaddr_in remote_addr; /* 客户端地址信息 */int sin_size;if (sockfd = socket(AF_INET, SOCK_STREAM, 0) = -1)perror(socket 创建失败!); exit(1);my_addr.sin_family=AF_INET;my_addr.sin_port=htons(SERVPORT);/* htons()把16位值从主机字节序转换成网络字节序*/my_addr.sin_addr.s_addr = INADDR_ANY;bz

27、ero(&(my_addr.sin_zero),8); /*保持与struct sockaddr同样大小 */if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr) = -1)perror(bind 出错!);exit(1);if (listen(sockfd, BACKLOG) = -1) perror(listen 出错!);exit(1);while(1) sin_size = sizeof(struct sockaddr_in);if (client_fd = accept(sockfd, (struc

28、t sockaddr *)&remote_addr, &sin_size) = -1) perror(accept error);continue;printf(收到一个连接来自: %sn, inet_ntoa(remote_addr.sin_addr);if (!fork() /* 子进程代码段 */if (send(client_fd, 连接上了 n, 26, 0) = -1)perror(send 出错!);close(client_fd);exit(0);close(client_fd);读取文件内容通信程序客户端#include#include#include#include#inc

29、lude#include#include#include#includeint port=8888;int main()int sockfd;int i=0;int z;char buf80,str180;struct sockaddr_in adr_srvr;FILE *fp;printf(打开文件.n);/*以只读的方式打开liu文件*/fp=fopen(liu,r);if(fp=NULL)perror(打开文件失败);exit(1);printf(连接服务端.n);/* 建立IP地址 */adr_srvr.sin_family=AF_INET;adr_srvr.sin_port=hton

30、s(port);adr_srvr.sin_addr.s_addr = htonl(INADDR_ANY);bzero(&(adr_srvr.sin_zero),8);sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd=-1)perror(socket 出错);exit(1);printf(发送文件 .n);/* 读取三行数据,传给udpserver*/for(i=0;i3;i+)fgets(str1,80,fp);printf(%d:%s,i,str1);sprintf(buf,%d:%s,i,str1);z=sendto(sockfd,buf,size

31、of(buf),0,(struct sockaddr *)&adr_srvr,sizeof(adr_srvr);if(z0)perror(recvfrom 出错);exit(1);printf(发送.n);sprintf(buf,stopn);z=sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&adr_srvr,sizeof(adr_srvr);if(z0)perror(sendto 出错);exit(1);fclose(fp);close(sockfd);exit(0);服务器端#include#include#include#incl

32、ude#include#include#include#include#includeint port=8888;int main()int sockfd;int len;int z;char buf256;struct sockaddr_in adr_inet;struct sockaddr_in adr_clnt;printf(等待客户端.n);/* 建立IP地址 */adr_inet.sin_family=AF_INET;adr_inet.sin_port=htons(port);adr_inet.sin_addr.s_addr =htonl(INADDR_ANY);bzero(&(ad

33、r_inet.sin_zero),8);len=sizeof(adr_clnt);/* 建立socket */sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd=-1)perror(socket 出错);exit(1);/* 绑定socket */z=bind(sockfd,(struct sockaddr *)&adr_inet,sizeof(adr_inet);if(z=-1)perror(bind 出错);exit(1);while(1)/* 接受传来的信息 */z=recvfrom(sockfd,buf,sizeof(buf),0,(struct

34、 sockaddr *)&adr_clnt,&len);if(z0)perror(recvfrom 出错);exit(1);bufz=0;printf(接收:%s,buf);/* 收到stop字符串,终止连接*/if(strncmp(buf,stop,4)=0)printf(结束.n);break;close(sockfd);exit(0);实验结果分析1、熟悉并记录程序执行结果。2、写出自己的心得体会。实验七网络程序设计(2)基本信息实验课程:Linux程序设计 设课形式:非独立课程学分:2实验项目:网络程序设计(2)项目类型:验证项目学时:2实验预习实验目的和要求:Socket的基本概念如

35、何实现面向连接的TCP编程如何实现非连接的TUDP编程复杂网络程序的实现网络程序高级编程技术实验条件:1、装有Linux操作系统的微型计算机;实验过程*客户端#include #include #include #include #include #include #include #include #include #include #define SERVPORT 4444/*服务器监听端口号*/#define MAXDATASIZE 256 /*最大同时连接请求数*/#define STDIN 0/*标准输入文件描述符*/int main(void)int sockfd;/*套接字描述符

36、*/int recvbytes;char bufMAXDATASIZE;/*用于处理输入的缓冲区*/char *str;char nameMAXDATASIZE;/*定义用户名*/char send_strMAXDATASIZE;/*最多发出的字符不能超过MAXDATASIZE*/struct sockaddr_in serv_addr;/*Internet套接字地址结构*/fd_set rfd_set, wfd_set, efd_set;/*被select()监视的读、写、异常处理的文件描述符集合*/struct timeval timeout;/*本次select的超时结束时间*/int

37、ret;/*与server连接的结果*/if (sockfd = socket(AF_INET, SOCK_STREAM, 0) = -1) /*错误检测*/perror(socket);exit(1);/* 填充 sockaddr结构 */bzero(&serv_addr, sizeof(struct sockaddr_in);serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(SERVPORT);inet_aton(127.0.0.1, &serv_addr.sin_addr);/*serv_addr.sin_addr.s_addr=inet_addr(192.168.0.101);*/if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr) = -1) /*错误检测*/perror(connect);exit(1);fcntl(sockfd, F_SETFD, O_NONBLOCK);printf(要聊天首先输入你的名字:);scanf(%s,name);namestrlen(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com