还剩38页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实验报告课程名称程序设计LINUX学院计算机学院专业软件工程班级14-3姓名张正银学号年月日202311山东科技大学教务处制kun5vm:~/Learn$/ch2-lshkun tty72016-12-3010:25:0/home/kun/Learn年月日星期五201612310:47:48CSTkun@vm:*/Learn$|计算器变量读入和输出
1.编辑程序
2.kunQvm:*/Learn$vim ch2-
2.sh kun0vm:*/Learn$catch2-
2.sh#!/bin/sh readx yz=expr$x+$y echoThe sumis$zn添加可执行权限
3.:*/Learn$chmod+x ch2-
2.sh运行程序
4.kun@vn:^/Learn$•/ch2-
2.sh15The sumis6
三、比较两个数字与否相等编写程序
1.kun@vn:~/Learn$cat ch2-
3.sh#!/bin/bashread xyif[$x-eq$y];then echoH$x==$yMelseecho,r$x!=$yM ft添加可执行权限
2.运行程序
3.kun@vm:-/Learn$•/ch2-
3.sh151!=5・kun0vm:~/Learn$•/ch
23.sh666==6kun0vm:*/Learn$|]、循环计算累加和编写程序
1.kunfivff:^/Learn$cat ch2-
4.sh#!/bin/bashtotal=0forj=l;j=100;j++do
二、「total exp$total+$j;doneecho Theresult is$totaln添加可执行权限
2.:-/Learn$chmod+x ch2-
4.sh运行程序
3.kun@vm:~/Learn$•/ch2-
4.sh Theresult is5050
六、运用she II函数计算两数之和编写程序
1.kun@vm:~/Learn$vim ch2-
5.shkun3vm:~/Learn$cat ch2-
5.sh#!/bin/bashsum{echo$$1+$2;sum$1$2a——a——a添加可执行权限
2.运行程序
3.・kun3vm:-/Learn$/ch2-
5.sh100200300kunavm:*/Learn$|
七、计算数组累乘编写程序
1.kun@vn:~/Learn$cat ch2-
6.sh;#!/bin/bash result=l for i in”$@”doresult=$$result*$i doneecho$result添加可执行权限
2.kun@vn:-/Learn$chmod+x ch2-
6.shkun@vm:~/Learn$./ch2-
6.sh25660kun@vm:-/Learn$•/ch2-
6.sh22kun@vm:~/Learn$•/ch2-
6.sh1000010000kun0vm:*/Learn$
7./ch2-
6.sh12481012686kun0vm:*/Learn$1•/ch2-
6.sh-56-3280kun@vn:~/Learn$•/ch2-6sh-56-3kun@vm:~/Learn$运行程序
3.
八、试验总结通过本次试验,我学会了shell中的I多种写法,包括流程控制,循环,数组,函数等等,理解到shell在Linux是一种强大的神器,可以批量完毕多种操作通过本次试验,我学会了shell中日勺多种写法,包括流程控制,循环,数组,函数等等,理解到shell在Linux是一种强大日勺神器,可以批量完毕多种操作U姓名张正馄同组试验者组另第周周四13试验项目名称试验三文献操作试验日期节9,10教师评语试验成绩指导教师
一、试验目的
1.熟悉cd、date pwdcal whoecho clearpasswd等常用命令
2.掌握在顾客主目录下对文献进行的操作复制一种文献、显示文献内容、查找指定内容、排序、文献比较、文献删除等
3.学会对目录进行管理创立和删除子目录、变化和显示工作目录、列出和更改文献权限、链接文献等
二、文献操作修改文献权限
1.设计一种程序,规定把系统中目录下的文献权限,设
2.“/etc”passwd编写语言程序
3.C置成文献所有者可读可写,所有其他顾客为只读权限kun@vm:~/Learn$cat5-
2.c〉/*文件预处理,包含函数库*/^include csys/types.h chmod/*文件预处理,包含函数库*/#include sys/stat.h chmod程序的主函数,开始入口*/int main/*Cchmod,7etc/passwdH,S_IRUSRIS_IWUSRIS_IRGRPIS_IROTH;」表示拥有者具有读权限二表示组曲人具有读权限,表示其他人具有读权限*//*S RUSRSJRGRP SJROTHreturn0;编译执行
4.kungvm:-/Learn$gcc-o5-
2.05-
2.ckungvm:~/Learn$./5-
2.O查看成果
5.kun@vm:-/Learn$Is-1/etc/passwd月-rw-r--r--1root root2284123120:33/etc/passwd
三、从终端读写数据文献时打开可以用函数,虽然本来的文献不存在,也可以用
1.open open函数创立文献在打开或者创立文献时,可以指定文献的属性及顾客的权限等参数关闭一种打开的文献,用函数当一种进程终止时,它所有已打
2.close开的文献都由内核自动关闭编写语言程序
3.C57c X#include unistd.h#include stdlib.hint mainvoid{char buf
[80];int n;n=readSTDIN_FILENO buf,80;/if n0{Nperrorread STDIN_FILENO;exit1;writeSTDOUT_FILENO bufn;r rreturn0;查看运行成果
4.Terminalabcdeffffffff abcdeffffffffProcess returned00x0execution timePress ENTER to continue.I、文献上锁和锁的释放.题目规定
2.1,设计一种程序,规定在下打开一种名为的文献,假如该文献不3“/root”存在,则创立此文献打开后对其加上强制性的写入锁按回F_WRLCK,车后解锁然后加上读出锁按回车后再解锁F_UNLCK,F_RDLCK,程序在终端运行后会显示程序的进程号,再打开终端F_UNLCKo12,会提醒此文献处在锁定状态,此时在终端可以多按回2车,观测程序的运行成果然后在终端按回车,等待终端解锁后,11在终端才可锁定此文献,你可观测到强制性锁是独占状态,当在终端2解锁后,在终端或可加读出锁,在读出锁状态终端或时运行21212不需要等待,由于读出锁是处在共享状态,请编写程序并测试程序运行的成果分析
4.主程序先用函数打开文献假如该文献不存在,则创立此文献;
5.open接着调用自定义函数先传递参数给文献lock_set:“F_WRLCK”5-llfile加锁,并打印输出给文献加锁进程的进程号,然后先传递参数给文献解锁,并打印输出给文献解锁进程的进程号;“F_UNLCK”5-llfile在自定义函数给文献上锁语句前,加上判断文献与否上锁的lock_set语句,假如文献已经被上锁,打印输出给文献上锁进程的进程号编写语言程序
6.C5-
7.C X#includestdio•h#includestdlib.h#include unistd.h#include sys/file.h#include sys/types.h♦include sys/stat.h voidlock_setint fdint typez{一struct flocklock;lock.l_whence=SEEK_SET;lock.l_start=0;lock.l_len=0;while1lock.l_type=type;/★根小同的值给文件力口节用或i ff ent1f dF-SETLKlock==0z z一★/{的共享锁,表示读取铀或建议性镂」lock.l_type==F_RDLCK-RDLCK力口上读取钺的是心printf%d\n-^etpid;为排斥锁,表示强制性能★/else if lock.l_type==F-WRLCK/w WRLCKprintfF力口上写入钺的是小„etpid;%dXn/gelse iflock.l_type==F__UNLCK释放强制性锁,;Printf,,.d\n”getpid return;八磷取文件锁的状杰”{一}fcntlfd F_GETLK,lock;iflock.l_type1=F_UNLCKr一iflock.l_type==F_RDLCK文件忌屏加上了读取锁.其讲程号是,℃・;print4,,+d\n”l kl_pid elseiflock.l_type==F_WRLCK,母件已加上写入锁,其讲程号是printf3\..lock.l_pid;getchar;%d nr}}int main{int fd;H,,fd=open/root/5-llfile O_RDWR|O_CREAT,0666;r一一iffd0,叶丁开出错,,;{perrorIZIL-LJLrexit1;F WRLCK;lock_setfdrgetchar;F UNLCK;lock_setfd,getchar;F RDLCK;lock_setfd,getchar;F UNLCK;lock_setfd,closefd;exit0;执行程序
7.终端1:加上写入锁的是:5403释放强制性锁5403文献已加上写入锁,其进程号是:5404文献已加上写入锁,其进程号是:5404文献已加上写入锁,其进程号是:5404加上读取锁日勺是5403释放强制性锁5403终端2文献已加上写入锁,其进程号是:5403文献已加上写入锁,其进程号是:5403文献已加上写入锁,其进程号是5403IJ姓名张正馄同组试验者组另第周周四11试验项目名称试验一熟悉命令试验日期Linux节9,10教师评语试验成绩指导教师
一、试验目的熟悉并掌握Linux操作系统基本命令
二、常用的一般命令理解系统改命令
1.1uname,date,wkun@vn:*$uname-aLinux vm
4.
4.0-31-generic#50-Ubuntu SMPWed Jul1300:07:12UTC2016x86_64x86_64x86_64GNU/Linux kun@vn:*$date年月日星期三2016122816:53:36CST kun@vm:**$w16:53:42up12min,1user,load average:
0.06,
0.21,
0.28USER TTYFROM LOGIN0IDLE JCPUPCPU WHATkuntty7:016:4112:
354.91s
0.53s/sbin/upstart-kun@vn:-$|理解义献的和命令
2.Is filekun@vm:*$IsDesktop Downloads Learn Pictures TemplatesDocuments examples.desktop MusicPublic Videoskun@vm:*$file examples.desktop examples•desktop:UTF-8Unicode textkun@vm:*$等命令的使用
3.cat,less,head,tail,nl,wc1加上写入锁日勺是5404释放强制性锁5404加上读取锁日勺是5404
五、释放强制性锁5404
六、流文献时打开和关闭带缓存的流文献操作,是基于输入/输出流机制的文献操作,
1.I/O I/O又做文献流的操作下面详细阐明文献流的关闭与打开File Stream.题目规定2设计一种程序,规定用流文献操作打开文献,假如该文
3.I/O“5-12file”献不存在,则创立此文献.题目分析4,带缓存时基于输入/输出流机制的文献操作时,打开文献用5I/O fopen函数,关闭文献用函数fclose程序编写
6.J5-
12.C X#includestdio•hint main3{FILE*fp;iffp=fopen ll5-12filen Ma+n==NULL/3{Printf“打开创建文件出错“;exit0;一fclosefp;L|运行成果
7.TerminalProcess returned00x0execution time:Press ENTER to continue.kun@vm:*/Learn$Is-al5-12ftle月-rw-rw-r--1kun kun0123121:155-12file可以看到程序运行后创立了〃5-12file〃文献
六、试验总结通过本次试验,我掌握了Linux下用C语言读写文献的措施,包括带缓存和不带缓存的措施此外也学会了用C语言修改文献权限等知识点可以看出Linux和C语言是浑然一体地,可以用C语言无缝地操作Linux系统通过本次试验,我掌握了Linux下用C语言读写文献的措施,包括带缓存和不带缓存的措施此外也学会了用C语言修改文献权限等知识点可以看出Linux和C语言是浑然一体地,可以用C语言无缝地操作Linux系统组别姓名张正馄同组试验者试验日期二周周四2试验项目名称试验四进程控制节9,10教师评语试验成绩I指导薮而
一、试验目的
1.理解进程的基本概念及进程时构造
2.学会Linux环境下进程的I有关函数时应用
3.掌握守护进程的概念、启动和建立
4.掌握进程操作程序的编写
二、进程简介进程是正在执行中的I程序当我们在终端执行命令时,Linux就会建立一种进程,而当我们日勺程序执行完毕时,这个进程就被终止了
三、Linux是一种多任务操作系统,容许多种顾客使用计算机系统,多种进程并发执行
四、Linux环境下启动进程有两种重要途径手工启动和调度启动
五、程序显示进程号和父进程号在环境下进程创立时,系统会分派一种唯一的数值给每个进程,
1.Linux这个数值就称为进程标识符PIDo.在中进程标识有进程号和它的父进程号其中,2Linux PID PPID PID唯一地标识一种进程和都是非零时正整数在中获PID PPIDLinux得目前进程的和的系统调用为和函数PIDPPIDgetpid getppid程序编写
3.♦include stdioh#include unistd.hint main{n MprintfpyJ:%d\n getpid;r printf”M4Sd\n\getppid;return0;编译运行
4.Terminalpid:3515ppid:3514Process returned00x0execution Press ENTER to continue.■Terminalpld:3542ppid:3541Process returned00x0execPress ENTERto continue.Terminal pid:3571pptd3570■Processreturned00x0execul PressENTERtocontinue.
四、可看到,每次运行的都是不一样的pid
五、子进程的创立进程调用fork函数创立一种新进程,由fork创立的新进程被称为子进程childprocess该函数被调用一次,但返回两次,两次返回的I区别是子进程时返回值是0,而父o进程时返回值则是新子进程的进程PIDo子进程和父进程继续执行之后的指令子进程是父进程的复制
1.fork品例如,子进程获得父进程数据空间、堆和栈的复制品注意,这是子进程所拥有的拷贝父、子进程并不共享这些存储空间部分,一般父、子进程共享代码段编写语言程序
2.Cfinclude sys/types.hfinclude unistd.h#include stdio.h finclude stdlib.hint main{pid_t pid;char*message;int n;pid=fork;M nifpid0{perror forkfailed\n;exit1;nelse ifpid==0{message=This is the childl;n=3;;else{message=This is the parent”n=6;whilen―{putsmessage;sleep1;•1运行程序
3.TerminalThis is the parentThis is thechild!This isthe parentThis isthechild!Thisisthe parentThis isthechild!Thisisthe parentThisistheparentThisisthe parentProcessreturned00x0execution time:
6.009PressENTERtocontinue.
五、进程的退出.题目规定1设计一种程序,规定子进程和父进程都在显示输出某些文字后分别用
2.和函数终止进程exit_exit.题目分析3由于函数使用时是缓冲方式,碰到“时自动将数据从缓
4.printf I/O\n”冲区读出可以看出,调用函数时,缓冲区中的记录能正常输出;exit而调用时,缓冲区中的记录无法输出_exit原则函数库中,有一种操作称为“缓冲,每次读写文献时,都
5.Linux I/O”是在缓冲区里读取、写入写入文献时,等满足一定条件才将缓冲区的内容一次性写入文献不过,有时没有满足选定的条件,数据只存在缓冲区内,假如这时调用函数直接关闭进程,缓冲区中的数据_exit就会丢失程序编写
6.6-
4.C X#include stdio.h#include stdlib.h#include unistd.h♦include sys/types,hint main{pid_t result;result=fork;int newret;Hifresult==-1{perrorFork error!;exit0;依啦”;else ifresult==0{printf child_exit0;}else{printf parent;exit0;1return0;}程序执行
7.Terminalparent heheehProcessreturned00x0execution time:00O2s PressENTERtocontinue.
六、可以看到,程序只在父进程进行了输出这是由于子进程调用了函数,没有进行缓冲区的刷新_exit10
七、试验总结通过本次试验,我理解了Linux的进程机制,学会了基本日勺进程创立,进程终止,学会了在Linux下用C语言操作进程理解到了Linux是一种多任务操作系统,容许我们使用计算机系统,多种进程并发执行通过本次试验,我理解了Linux欧I进程机制,学会了基本日勺进程创立,进程终止,学会了在Linux下用C语言操作进程理解到了Linux是一种多任务操作系统,容许我们使用计算机系统,多种进程并发执行IJ姓名张正馄同组试验者组另第周周四15试验项目名称试验五线程练习试验日期节9,10教师评语试验成绩指导教师
一、试验目的>理解线程的基本概念>掌握线程有关函数及应用>理解线程同步互斥
二、线程概述线程定义为进程内一种执行单元或一种可调度实体在不拥有线程的进程概念中,进程既是一种拥有资源的独立单位,它可独立分派虚地址空间、主存和其他,又是一种可独立调度和分派的基本单位在有了线程后来,资源拥有单位称为进程或任务,调度的I单位称为线程、又称轻进程Light WeightProcess,LWP多线程的进程在同一地址空间内包括多种不一样的控制流,也即属于同一进程下的线程,它们共享进程拥有的资源,如代码、数据、文献等线程也独占某些资源,如堆栈、程序计数器等多线程系统时长处包括对顾客响应的改善,进程内的资源共享,以及运用多处理器体系构造的便利从实现的角度看,把线程分为顾客级线程和内核级线程顾客级线程对程序员来说是可见欧I,而对内核来说是未知的,顾客空间的线程库一般用以管理顾客级线程,线程库提供对线程创立、调度和管理日勺支持
三、内核级线程由操作系统支持和管理,在内核空间实现线程创立、调度和管理I、顾客级线程与内核级线程相比,长处是创立和管理要更快;缺陷是得到CPU的时间更少,当一种线程阻塞时,拖累其他线程所有阻塞
五、共享内存变量访问中冲突的现象有关线程同步与互斥
1.当并发执行的I线程共享数据时,各线程会改写共享日勺数据,由于CPU调度次序日勺不确定性,导致线程运行成果的不确定性因此,必须为共享数据的一组互相协作的线程提供互斥一种思想是保证在任何时刻最多只能有一种线程执行这些访问共享数据的代码这就是临界区互斥问题线程在并发执行时为了保证成果时可再现性,各线程执行序列必须加
2.以限制以保证互斥地使用临界资源,互相合作完毕任务多种有关线程在执行次序上的协调称为线程同步用于保证多种线程在执行次序上的协调关系的对应机制称为线程同步机制线程库提供了多种方式来处理线程同步互斥机制,最常用的是
3.Pthread互斥锁、条件变量和信号量语言程序编写
4.Ckun@vm:-$cat myc#include stdioh#include unistd.hint main{printfHpid:%d\nM,getpid;printfNppid:%d\nn,getppid;return0;kun@vm:*$tail-n3mycprintfnppid:%d\nH,getppid;return0;kun@vm:-$head-n3myc#include stdio»h/include unistdhkun@vm:-$nt my.c1#include stdioh2#include unistd.h34int main{5printfMpid:%d\nM,getpid;6printfHppid:%d\nH,getppid;7return0;8kun@vm:*$wc my.c814140myc文本内容查找命令
4.grepkun@vn:-$cat myc|grep include#incalude stdioh#include unistdh文献权限欧修改
5.I chmod^hown.umaskkun@vn:*$Is-I my.c月-rw-r--r--1kun kun140122817:01myc kun@vm:*$sudo chmod777myc[sudo]password forkun:kun@vm:*$Is-I my.c月-rwxrwxrwx1kun kun140122817:01my.c kun@vm:*$sudo chownroot:root my.ckun@vm:*$Is-I my.c月-rwxrwxrwx1root root140122817:01my.c kun@vn:-$文献夹操作mkdir,rmdir#include stdio.h♦include stdlib.h♦include pthread.h#define nLOOP10int/*共享counter=0;void*pthreadvoid*vptrint i,val;fori=0;inLOOP;i++{val=counter;sleepvptr;H Mprintf%x:%d\n9unsigned intpthread_self9counter;counter=val+l;}return NULL;}int mainintargc rchar**argv{pthread_t tidl9tidl;pthread_createtidl,NULL,pthread void*1;pthread_createtid2,NULL,rpthread,void*2;pthread_jointidl NULL;9pthread_jointid2,NULL;return0;}程序执行
5.[root©localhost root]»./B-3b7f5fba00b755eba01b7f5fba01b7f5fba02b755eba03b7f5fba05;;2b7f5fba04b755eba05b7f5fbaO3b7f5fba06b755eba07b7f5fbaO4b7f5fba08b755eba0t:9b7f5fboO5b755ebr»n b755eba06b755eba07b755eba08b755eba09t:counter*10编译并运行程序成果是10o我们创立两个线程,counter的初值为0,各自把counter增长10次,正常状况下最终counter应当等于20
四、试验总结通过本次试验,我学会了在Linux下使用C语言操作线程的I措施,理解了线程和进程的区别,对于理解Linux的关键非常有协助通过本次试验,我学会了在Linux下使用C语言操作线程的措施,理解了线程和进程日勺区别,对于理解Linux日勺关键非常有协助IJ姓名张正馄同组试验者组另第周周四16试验项目名称试验六网络编程试验日期节9,10教师评语试验成绩指导教师
一、试验目的>理解端口及Socket的基本概念>掌握面向连接的TCP编程>掌握面向非连接的IUDP编程>理解I/O多路运用的1控制>理解复杂网络程序时实现
二、协议概述协议
1.TCP/IPTCP/IP协议Transmission ControlProtocol/lnternet Protocol叫做传播控制/网际协议,又叫网络通信协议是世纪年代中期美国国防部为其广域网开发的
2.TCP/IP2070ARPANET网络体系构造和协议原则,以它为基础组建的是目前国际上Internet规模最大的计算机网络正由于的广泛使用,使得成Internet TCP/IP了实际上的原则虽然叫传播控制协议()和网际协议()但实际上是一组
3.TCP/IP TCPIP,协议,它包括了上百个功能的协议,如、、、、、ICMP RIPTELNET FTPSMTP、等,这些协议一起被称为协议ARP TFTPTCP/IP和协议
4.UDP TCPTCP与UDP是两种不一样的网络传播方式两个不一样计算机中的程序,使用IP地址和端口,要使用一种约定的措施进行数据传播重要的区别是进行数据传播时与否进行连接是一种面向连接的网络传播方式这种方式可以理解为打
5.TCP TCP计算机先呼喊计算机计算机接受连接后发出确认信息,计算机A B,B收到确认信息后来发送信息,计算机完毕数据接受后来发送完毕A B信息,这时再关闭数据连接因此是面向连接的可靠的信息传播TCP方式这种方式是可靠的,缺陷是传播过程复杂,需要占用较多的网络资源是一种不面向连接的传播方式可以简章理解成邮寄信件
6.UDP UDP将信件封装放入邮筒后来,不再参预邮件的传送过程使用传送信UDP息时,不建立连接,直接把信息发送到网络上,由网络完毕信息时传送信息传递完毕后来也不发送确认信息这种传播方式是不可靠的,不过有很好的传播效率对传播可靠性规定不高时,可以选择使用这种传播方式套接字
7.Socket是网络编程的一种接口,它是一种特殊的11/0在TCP/IP协议中,“IP地址+TCP或UDP端口号”可以唯一标识网络通讯中的I一种进程,可以简朴地认为“IP地址+端口号”就称为socket在TCP协议中,建立连接日勺两个进程各自有一种socket来标识,这两个socket构成的I socket对就唯一标识一种连接用socket函数建立一种socket连接,此函数返回一种整型的J socket描述符,随即进行数据传播一种完整日勺socket有一种当地唯一的I socket号,由操作系统分派最重要的I是,socket是面向客户/服务器模型而设计时
三、一般,socket分为三种类型流式socket、数据报socket和原始socketo注意:一种完整的socket有一种当地唯一的socket号,由操作系统分派最重要的是,socket是面向客户/服务器模型而设计的J
五、设计服务器-客户端通信程序编写服务端程序
1.♦include netinet/in.h//for sockaddr_in#include sys/types.h//for socket#include sys/socket.h//for socket♦include stdio.h//for printf#include stdlib.h//for exit♦include string.h//for bzero/*#include sys/types.h・#include sys/stat h♦include fcntl.h♦include unistd.h♦define HELLO_WORLD_SERVER_PORT6666♦define LENGTH_OF_LISTEN_QUEUE20♦define BUFFER_SIZE1024♦define FILE_NAME_MAX_SIZE512int mainintargc,char**argv//设置一种地址构造代表服务器地址,端口socket server_addr,internet struct sockaddr_in server_addr;//把一段内存区的内容所有设置为bzero server_addr,sizeof server_addr;J0server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=htonsINADDR_ANY;server_addr.sin_port=htonsHELLO_WORLD_SERVER_PORT;//创立用于时流协议用代表服务器internet TCP socket,server_socket socketint server_socket=socketPF_INET,SOCK_STREAM0;Zif server_socket0printfnCreate Socket Failed!n;exit1;int opt=1;setsockoptserver_socket,SOL_SOCKET,SO_REUSEADDR opt,sizeofopt;Z//把和地址构造联络起来socket socketifbindserver_socket,struct sockaddr*server_addr,sizeofserver_addr printfnServerBind Port:%d Failed!n HELLO_WORLD_SERVER_PORT;exit1;z}用于监听//server_socket工iflistenserver_socket,LENGTH/F_L STEN_QUEUE printfnServerListen Failed!n;exit1;//服务器端要一直运行while1//定义客户端勺地址构造H socket client_addr struct sockaddr_in client_addr;socklen_t length=sizeofclient_addr;//接受一种到代表的的一种连接//假如没有连接祈求,就等待到有连接祈求一这是server_socket socket I accept函数日勺特性函数返回一种新欢这个用于同连接到欧客户的//accept Isocket,socket new_server_socket IJ通信代表了服务器和客户端之间肤一种通信通道函数把连接到、客户端信息//new_server_socketI//accept W J填写到客户端、地址构造中WJsocketclient_addr intnew_server_socket=acceptserver_socket,structsockaddr*client_addr,^length;ifnew_server_socket0printfnServer AcceptFailed!\nH;break;char buffer[BUFFER_SIZE];bzero buffer,BUFFER_SIZE;length=recvnew_server_socket bufferBUFFER_SIZE0;if length0printfnServer RecieveDataf zzFailed!\nn;break;char file_name[FILE_NAME_MAX_SIZE+1];bzerofile_name FILE_NAME_MAX_SIZ E+1;zstrncpyfile_name buffer,zstrlen bufferFI LE_N7^4E_MAX_S IZEFI LE_N7^4E_MAX_S IZE:strlen buffer;//int fp=openfile_name O_RDONLY;z//if fp0,printf%s\n file_name;FILE*fp=fopenfile_name,nrn;if NULL==fpprintf nFile:\t%s NotFound\nn file_name;elsebzero buffer,BUFFER_SIZE;intrfile_block_length=0;//while file_block_length=readfp buffer,BUFFER_SIZE0zwhile file_block_length=freadbuffer,sizeofchar,BUFFER_SIZE fp0{zprintfnfile_block_length=%d\nn,file_block_length;//发送中的字符串到实际是给客户端buffer new_server_socketzifsendnew_server_socket buffer,file_block_length00z zprintfnSendFile:\t%s Failed\nn,file_name;break;bzerobuffer,BUFFER_SIZE;}//closefp;fclosefp;,printfnFile:\t%s TransferFinished file_name;//关闭与客户端日勺连接closenew_server_socket;//关闭监听用日勺socket closeserver_socket;return0;编写客户端程序
2.♦include netinet/in.h//for sockaddr_in#include sys/types.h//for socket♦include sys/socket.h//for socket♦include stdio.h//for printf♦includestdlib.h//for exit♦include string.h//for bzero/*♦include sys/types.h#include sys/stat.h♦include unistci.h#include fcntl.h♦define HELLO_WORLD_SERVER_PORT6666#define BUFFER_SIZE1024♦define FILE_NAME_MAX_SIZE512int mainintargc,char**argvif argc!=2{printfUsage:./%s ServeriPAddress\nn,argv
[0];exit1;//设置一种地址构造代表客户机地址,端口socket clienjaddr,internet structsockaddr_in client_addr;//把一段内存区的内容所有设置为bzero client_addr sizeofclient_addr;0z协议族client_addr.sin_family=AF_INET;//internet工工表达自动获取本机地址client_addr.sin_addr.s_addr=htons NADDR_ANY;//NADDR_ANY表达让系统自动分派一种空闲端口client_addr.sin_port=htons0;//0//创立用于的流协议用代表客户机internet ITCPsocket,client_socket socketintclient_socket=socketAF_INET SOCK_STREAM,0;Zifclient_socket0printf CreateSocketFailed!\nn;exit1;//把客户机的和客户机『、地址构造联络起来socket Jsocketifbindclient_socket,structsockaddr*client_addr,sizeofclient_addr{printfnClient BindPort Failed!\nn;exit1;}//设置一种地址构造代表服务器的地址,端口㊀socket server_addr,I intrnet structsockaddr_in server_addr;bzeroserver_addr sizeofserver_addr;Aserver_addr.sin_family=AF_INET;//服务器的地址来自程序的参数if inet_aton argv
[1],server_addr.sin_addr==0IP printfServer IPAddress Error!\nn;exit1;server_addr.sin_port=htonsHELLO_WORLD_SERVER_PORT;socklen_t server_addr_length=sizeofserver_addr;//向服务器发起连接,连接成功后代表了客户机和服务器日勺一种连接㊀cli nt_socket socketifconnectclient_socket,structsockaddr*server_addr,server_addr_length0printfnCan NotConnect To%s!\nn,argv
[1];exit1;char file_name[FILE_NAME_MAX_SIZE+1];bzerofile_name,FILE_NAME_MAX_SIZ E+1;printf PleaseInput FileName OnServer:\tH;scanf%s”,file_name;char buffer[BUFFER_SIZE];bzero bufferBUFFER_SIZE;zstrncpybuffer,file_name,strlenfile_nameBUFFER_SIZEBUFFER_SIZE:strlenfile_name;//向服务器发送中欧数据buffer I工sendclient_socket,buffer,BUFFER_S ZE,0;//int fp=openfile_name O_WRONLY|O_CREAT;z//if fp0FILE*fp=fopenfile_name,wn;if NULL==fp{㊀printfnFile:\t%s CanNot OpenTo Writ\n,file_name;exit1;//从服务器接受数据到中buffer工bzero buffer,BUFFER_S ZE;int length=0;while length=recvclient_socket buffer,BUFFER_SIZE,0{zif length0printfnRecieve DataFrom Server%s Failed!\nn,argv
[1];break;//int write_length=writefp buffer,length;zint write_length=fwritebuffer,sizeofchar,length,fp;if write_lengthlength printfHFile:\t%s WriteFailed\nn file_name;rkun@vm:**$IsDesktop Downloads Learn PicturesTemplatesDocuments examples•desktop MusicPublic Videoskun@vm:*$mkdir dirlkun@vm:*$IsDesktop Documentsexamples.desktop MusicPublic VideosdirlDownloads Learn Pictures Templateskun@vm:*$rmdir dirl/kun@vm:*$Is DesktopDownloadsLearnPicturesTemplatesDocuments examples.desktop MusicPublic Videoskun@vm:-$
三、顾客和组的管理管理探究顾客配置文献
1./etc/passwd,/etc/shadowkun@vm:~$sudo tail-n5/etc/passwdpulse:x:117:124:PulseAudio daemon,,,:/var/run/pulse:/bin/false八rtkit:x:118:126:RealtimeKit,:/proc:/bin/falsesaned:x:119:127::/var/lib/saned:/bin/falseusbmux:x:120:46:usbmux daemon,,,:/var/lib/usbmux:/bin/falsekun:x:1000:1000:kun,,:/home/kun:/bin/bashfkun@vm:~$sudo tail-n5/etc/shadowpulse:*:17001:0:99999:7:::rtkit:*:17001:0:99999:7:::saned:*:17001:0:99999:7:::usbmux:*:17001:0:99999:7:::e75s6kbMVwldgP8r5IBLz.:17150O:99999:7:::kun@vm:*$是顾客数据库,其中的域给出了顾客名、加密口令和顾
2./etc/passwd I客时其他信息是在安装了影子口令软件欧系统./etc/shadow shadowI上时影子口令文献影子口令文献将.文献中的加密口令移动/etc/passw到中,而后者只对超级顾客•….可读这使破译口令更/etc/shadow困难,以此增长系统的安全性I探究组配置文献组的配置文献
3./etc/group,/etc/gshadowbreak;bzero buffer,BUFFER_SIZE;}printfRecieve File:\t%s FromServer[%s]Finished\nn file_name,argv
[1];zclosefp;//关闭socketclose client_socket;return0;测试成果
3.
六、当同步运行客户端和服务端程序后,只要在客户端建立一种帐号,双方就可以收发数据了
七、试验总结通过本次试验,我学会了在Linux操作系统下,设计服务端和客户端程序的基本措施,理解了socket通信的重要性,同步也复习了在《计算机网络》中学到日勺TCP、UDP、IP和端口等知识通过本次试验,我学会了在Linux操作系统下,设计服务端和客户端程序的基本措施,理解了socket通信的重要性,同步也复习了在《计算机网络》中学到日勺TCP、UDP、IP和端口等知识kun avm:*$sudo tail-n5/etc/grouppulse-access:x:125:rtkit:x:126:saned:x:127:kun:x:1000:sambashare:x:128:kun一$kunvn:sudo tail-n5/etc/gshadowpulse-access:!::rtkit:!::saned:!::kun:!::sambashare:!::kunkun@vm:**$等命令
4.id,who,whoami,groupskun@vm:*$iduid=1000kun gid=1000kun groups=1000kun,4adm,24cdrom,27sudo,30dip,46plugdev,113lpadmin,128sambasharekun@vm:-$whokun tty72016-12-2910:05:0kungvm:**$whoamikunkun@vn:*$groupskun admcdrom sudodip plugdevIpadmin sambasharekun@vm:*$文献打包与压缩压缩和解压
1.tarkun@vm:**$IsDesktop DownloadsLearnPicturesTemplatesDocumentsexamples.desktop MusicPublic VideoskunQvm:*$tar-zcvf learn.tar.gz Learn/Learn/Learn/6-
2.cLearn/6-4Learn/6-
2.oLearn/6-
3.oLearn/6-
4.oLearn/6-
1.cLearn/6-
1.oLearn/6-
4.cLearn/6-
3.c kun@vm:*$Is DesktopDownloadsLearn Music PublicVideosDocumentsexamples•desktop learn.tar.gz PicturesTemplateskun@vm:**$kun@vm:-$IsDesktop DownloadsLearnMusicPublic VideosDocumentsexamples.desktop learn.tar.gz PicturesTemplateskun@vm:-$Learn/Learn/6-
2.cLearn/6-4Learn/6-
2.oLearn/6-
3.oLearn/6-
4.oLearn/6-l.cLearn/6-
1.oLearn/6-
4.cLearn/6-
3.c
五、软件包管理安装软件
1.treekun@vm:-$sudo apt-get installtreeReading packagelists...DoneBuilding dependencytreeReading stateinformation...DoneThe followingNEW packages will beinstalled:tree0upgraded,1newly installed,0to removeand11not upgraded.Need toget
40.6kB ofarchives.After thisoperation,138kB ofadditional diskspace willbe used.Get:1-3[
40.6kB]Fetched
40.6kB in2s
18.5kB/sSelecting previouslyunselected packagetree.Reading database•・•216049files anddirectories currentlyinstalled.Preparing tounpack.Unpacking tree
1.
7.0-3•••Processing triggersfor man-db
2.7・5・1Setting uptree
1.
7.0-3•••kun@vpi:~$|卸载软件
2.treekun@vm:**$sudo apt-get removetreeReading packagelists...DoneBuilding dependencytreeReading stateinformation...DoneThe followingpackageswillbe REMOVED:tree0upgraded,0newly installed,1to removeand11not upgraded.After thisoperation,138kB diskspace willbe freed.Do youwant tocontinue[Y/n]yReading database••・216055files anddirectories currentlyinstalled.Removing tree
1.
7.0-3Processing triggersfor man-db
2.
7.5-1•••kun@vm:**$treeThe program1tree iscurrently notinstalled.You caninstall itby typing:sudo aptinstalltree kun@vn:〜5
六、进程管理命令动态显示进程状态
1.toptop-10:30:18up25min,1user,load average:
0.22,013,
0.13Tasks:251total,1running,250sleeping,0stopped,0zombie%Cpus
2.3us,
3.2sy,
0.8nt,
89.4id,
4.2wa,
0.0hi,
0.1si,
0.0stKtB Mem:2030628total,188516free,625036used,1217076buff/cacheKiB Swap:2094076total,2090840free,3236used.1165776avail MemPIDUSER PRNI VIRTRES SHRS%CPU%MEM TIME+COMMAND1root20011962057163928S
0.
00.30:
03.22systemd2root200000S
0.
00.00:
00.02kthreadd3root200000S Q.Q
0.00:
00.08ksoftirqd+5root0-20000S
0.
00.00:
00.00kworker/0+7root200000S
0.
00.00:
01.70rcu_sched8root200000S
0.
00.00:
00.00rcu_bh9root Ft0000S
0.
00.00:
00.12migration+命令显示瞬时进程状态
2.pskun@vm:*$ps-auxUSER PID%CPU%MEM VSZRSS TTYSTAT STARTTIME COMMAND
7.root
10.
20.21196205716Ss10:04003/sbin/init spl7•root
20.
00.000S10:04000[kthreadd]7■root3G.Q
0.000S10:04000[ksoftirqd/0]7•root
50.
00.000S10:04000[kworker/O:0H]7•root
7010.000S1004001[rcu_sched]7*root8Q.Q0e000S1004000[rcu_bh]7•root
9000.000s10:04000[migration/0]7•root
100.
00.000s10:04000[watchdog/0]7■root
110.
00.000s1004000[watchdog/1]7•root12Q.Q
0.000s1004000[migration/1]root
130.
10.000s1004002rksoftirad/117•命令终止一种进程
3.Kill用打开一种文献并在后台运行,显示的进程号为然后用命令杀死这个进程,gedit a.cpp17271,kill观测到关闭gedit・kundvm:-$gedit a.cpp
[1]17271kun@vm:*$sudo kill17271kun@vn:*$|
七、试验总结通过本次试验,熟悉了好多Linux下面的基本命令,可以看出Linux的命令基本上均有好多参数可选,这样就可以用一条命令完毕好多任务,大大提高效率此外还学会了当命令不会使用的时候,可以调用man来查看命令日勺使用措施通过本次试验,熟悉了好多Linux下面的基本命令,可以看出Linux日勺命令基本上均有好多参数可选,这样就可以用一条命令完毕好多任务,大大提高效率此外还学会了当命令不会使用欧I时候,可以调用man来查看命令日勺使用措施IJ姓名张正馄同组试验者组另第周周四12试验项目名称试验二编程试验日期Shell节9,10教师评语试验成绩指导教师
一、试验目的>掌握Shell命行时运行>掌握编写和执行Shell程序的I环节>掌握在Shell中使用参数和使用变量的1措施>掌握体现式比较,循环构造语句和条件构造语句的写法>掌握在shell脚本中使用函数的措施
二、简朴bash脚本编写脚本
1.bashr:-/Learn$cat ch2-l.sh#!/bin/bash#一个高单例子whopwd date添加执行权限
2.kun@vm:-/Learn$sudo chmod+x ch2-l.sh[sudo]password forkun:一一•.A-••——•运行成果
3.。
个人认证
优秀文档
获得点赞 0