nbhkdz.com冰点文库

Linux程序设计 实验报告 大作业

时间:2017-01-05


实验报告

课程名称:

LINUX 程序设计

学院:计算机学院

专业:软件工程班级:14-3

姓名:张正锟学号: 201401061038

2017 年 1 月 1 日

山东科技大学教务处制
1

实验报告
组别 实验项目名称 教师评语 实验成绩 指导教师 姓名
实验一熟悉 Linux 命令

张正锟

同组实验者 实验日期
第 11 周周四 9,10 节

一、 实验目的
熟悉并掌握 Linux 操作系统基本命令

二、 常用的普通命令
1. 了解系统的 uname,date,w 命令

2. 了解文件的 ls 和 file 命令

3. cat,less,head,tail,nl,wc 等命令的使用

2

4. 文本内容查找 grep 命令

5. 文件权限的修改 chmod,chown,umask

6. 文件夹操作:mkdir,rmdir
3

三、 用户和组的管理管理
1. 探究用户配置文件/etc/passwd, /etc/shadow

/etc/passwd 是用户数据库,其中的域给出了用户名、加密口令和用户的其他信 息. /etc/shadow 是在安装了影子(shadow)口令软件的系统上的影子口令文件。 影子口 令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow 中,而后者只对超级用 户( r o o t )可读。这使破译口令更困难,以此增加系统的安全性。

2. 探究组配置文件组的配置文件/etc/group, /etc/gshadow

4

3. id, who, whoami,groups 等命令

四、 文件打包与压缩
1. tar 压缩和解压

5

五、 软件包管理
1. 安装软件 tree

2. 卸载软件 tree

6

六、 进程管理
1. top 命令动态显示进程状态

2. ps 命令显示瞬时进程状态

3. Kill 命令终止一个进程
用 gedit 打开一个文件 a.cpp 并在后台运行,显示的进程号为 17271,然后用 kill 命令杀死这个进
7

程,观察到 gedit 关闭

七、 实验总结
通过本次实验,熟悉了好多 Linux 下面的基本命令,可以看出 Linux 的命令基本 上都有好多参数可选,这样就可以用一条命令完成好多任务,大大提高效率。另外 还学会了当命令不会使用的时候,可以调用 man 来查看命令的使用方法。

8

实验报告
组别 实验项目名称 教师评语 实验成绩 指导教师 姓名
实验二 Shell 编程

张正锟

同组实验者 实验日期
第 12 周周四 9,10 节

一、 实验目的
? 掌握 Shell 命行的运行 ? 掌握编写和执行 Shell 程序的步骤 ? 掌握在 Shell 中使用参数和使用变量的方法 ? 掌握表达式比较,循环结构语句和条件结构语句的写法 ? 掌握在 shell 脚本中使用函数的方法

二、 简单 bash 脚本
1. 编写 bash 脚本

2. 添加执行权限

9

3. 运行结果

三、 计算器:变量读入和输出
1. 编辑程序

2. 添加可执行权限

3. 运行程序

四、 比较两个数字是否相等
1. 编写程序

10

2. 添加可执行权限

3. 运行程序

五、 循环计算累加和
1. 编写程序

2. 添加可执行权限

3. 运行程序

六、利用 shell 函数计算两数之和
1. 编写程序

11

2. 添加可执行权限 3. 运行程序

七、计算数组累乘
1. 编写程序

2. 添加可执行权限

3. 运行程序

12

八、 实验总结
通过本次实验,我学会了 shell 中的各种写法,包括流程控制,循环,数组,函 数等等,了解到 shell 在 Linux 是一种强大的神器,可以批量完成各种操作。

13

实验报告
组别 实验项目名称 姓名
实验三文件操作

张正锟

同组实验者 实验日期
第 13 周周四 9,10 节

教师评语 实验成绩 指导教师

一、 实验目标
1.熟悉 cd、date、pwd、cal、who、echo、clear、passwd 等常用命令。 2.掌握在用户主目录下对文件进行的操作:复制一个文件、显示文件内容、查 找指定内容、排序、文件比较、文件删除等。 3.学会对目录进行管理:创建和删除子目录、改变和显示工作目录、列出和更 改文件权限、链接文件等。

二、 文件操作:修改文件权限
设计一个程序,要求把系统中“/etc”目录下的 passwd 文件权限,设置成文件 所有者可读可写,所有其他用户为只读权限。

1. 编写 C 语言程序

14

2. 编译执行

3. 查看结果

三、 从终端读写数据
文件的打开可以用 open 函数,即使原来的文件不存在,也可以用 open 函数创 建文件。在打开或者创建文件时,可以指定文件的属性及用户的权限等参数。 关闭一个打开的文件,用 close 函数。当一个进程终止时,它所有已打开的文件都由 内核自动关闭。

1. 编写 C 语言程序

15

2. 查看运行结果

四、文件上锁和锁的释放
1. 题目要求
设计一个程序,要求在“/root”下打开一个名为“5-11file”的文件,如果该文 件不存在,则创建此文件。打开后对其加上强制性的写入锁 F_WRLCK,按回车后解 锁 F_UNLCK,然后加上读出锁 F_RDLCK,按回车后再解锁 F_UNLCK。程序在终端 1 运行后会显示程序的进程号,再打开终端 2,会提示此文件处于锁定状态,此时在终 端 2 可以多按回车,观察程序的运行结果。然后在终端 1 按回车,等待终端 1 解锁 后,在终端 2 才可锁定此文件,你可观察到强制性锁是独占状态,当在终端 2 解锁 后,在终端 1 或 2 可加读出锁,在读出锁状态终端 1 或 2 的运行不需要等待,因为 读出锁是处于共享状态,请编写程序并测试程序运行的结果。

2. 分析
主程序先用 open 函数打开文件“5-11file” ,如果该文件不存在,则创建此文件; 接着调用自定义函数 lock_set:先传递参数“F_WRLCK”给文件“5-11file”加锁,并 打印输出给文件加锁进程的进程号,然后先传递参数“F_UNLCK”给文件“5-11file” 解锁, 并打印输出给文件解锁进程的进程号; 在自定义函数 lock_set 给文件上锁语句 前,加上判断文件是否上锁的语句,如果文件已经被上锁,打印输出给文件上锁进 程的进程号。

3. 编写 C 语言程序
16

17

4. 执行程序
终端 1: 加上写入锁的是: 5403 释放强制性锁: 5403 文件已加上写入锁,其进程号是: 5404 文件已加上写入锁,其进程号是: 5404 文件已加上写入锁,其进程号是: 5404 加上读取锁的是: 5403 释放强制性锁: 5403 终端 2: 文件已加上写入锁,其进程号是: 5403 文件已加上写入锁,其进程号是: 5403

18

文件已加上写入锁,其进程号是: 5403 加上写入锁的是: 5404 释放强制性锁: 5404 加上读取锁的是: 5404 释放强制性锁: 5404

五、 流文件的打开和关闭
带缓存的流文件 I/O 操作,是基于输入/输出(I/O)流机制的文件操作,又做文 件流(File Stream)的操作。下面具体说明文件流的关闭与打开。

1. 题目要求
设计一个程序,要求用流文件 I/O 操作打开文件“5-12file” ,如果该文件不存在, 则创建此文件。

2. 题目分析
带缓存的基于输入/输出(I/O)流机制的文件操作时,打开文件用 fopen 函数, 关闭文件用 fclose 函数。

3. 程序编写

19

4. 运行结果

可以看到程序运行后创建了”5-12file”文件

六、实验总结
通过本次实验,我掌握了 Linux 下用 C 语言读写文件的方法,包括带缓存和不带 缓存的方法。另外也学会了用 C 语言修改文件权限等知识点。可以看出 Linux 和 C 语 言是浑然一体地,可以用 C 语言无缝地操作 Linux 系统。

20

实验报告
组别 实验项目名称 姓名
实验四进程控制

张正锟

同组实验者 实验日期
第 14 周周四 9,10 节

教师评语 实验成绩 指导教师

一、 实验目标
1. 理解进程的基本概念及进程的结构 2. 学会 Linux 环境下进程的相关函数的应用 3. 掌握守护进程的概念、启动和建立 4. 掌握进程操作程序的编写

二、 进程简介
进程是正在执行中的程序。 当我们在终端执行命令时, Linux 就会建立一个进程, 而当我们的程序执行完成时,这个进程就被终止了。 Linux 是一个多任务操作系统,允许多个用户使用计算机系统,多个进程并发执 行。 Linux 环境下启动进程有两种主要途径:手工启动和调度启动。

三、 程序显示进程号和父进程号
在 Linux 环境下进程创建时,系统会分配一个唯一的数值给每个进程,这个数值

21

就称为进程标识符(PID) 。 在 Linux 中进程标识有进程号(PID)和它的父进程号(PPID) 。其中,PID 唯一 地标识一个进程。PID 和 PPID 都是非零的正整数。在 Linux 中获得当前进程的 PID 和 PPID 的系统调用为 getpid 和 getppid 函数。

1. 程序编写

2. 编译运行

22

可看到,每次运行的 pid 都是不同的。

四、子进程的创建
进程调用 fork 函数创建一个新进程,由 fork 创建的新进程被称为子进程(child process) 。该函数被调用一次,但返回两次,两次返回的区别是子进程的返回值是 0, 而父进程的返回值则是新子进程的进程 PID。 子进程和父进程继续执行 fork 之后的指令。子进程是父进程的复制品。例如, 子进程获得父进程数据空间、堆和栈的复制品。注意,这是子进程所拥有的拷贝。 父、子进程并不共享这些存储空间部分,通常父、子进程共享代码段

1. 编写 C 语言程序

23

2. 运行程序

五、进程的退出 1. 题目要求
设计一个程序, 要求子进程和父进程都在显示输出一些文字后分别用 exit 和_exit 函数终止进程。

2. 题目分析
由于 printf 函数使用的是缓冲 I/O 方式,遇到”\n”时自动将数据从缓冲区读出。 可以看出,调用 exit 函数时,缓冲区中的记录能正常输出;而调用_exit 时,缓冲区 中的记录无法输出。 Linux 标准函数库中,有一种操作称为“缓冲 I/O” ,每次读写文件时,都是在缓 冲区里读取、写入。写入文件时,等满足一定条件才将缓冲区的内容一次性写入文 件。但是,有时没有满足选定的条件,数据只存在缓冲区内,如果这时调用_exit 函 数直接关闭进程,缓冲区中的数据就会丢失。

3. 程序编写

24

4. 程序执行

可以看到,程序只在父进程进行了输出。这是因为子进程调用了_exit()函数,没 有进行缓冲区 IO 的刷新。

六、实验总结
通过本次试验, 我了解了 Linux 的进程机制, 学会了基本的进程创建, 进程终止, 学会了在 Linux 下用 C 语言操作进程。了解到了 Linux 是一个多任务操作系统,允许 我们使用计算机系统,多个进程并发执行。
25

实验报告
组别 实验项目名称 姓名
实验五线程练习

张正锟

同组实验者 实验日期
第 15 周周四 9,10 节

教师评语 实验成绩 指导教师

一、 实验目的
? 了解线程的基本概念 ? 掌握线程相关函数及应用 ? 理解线程同步互斥

二、 线程概述
线程定义为进程内一个执行单元或一个可调度实体。在不拥有线程的进程概念 中,进程既是一个拥有资源的独立单位,它可独立分配虚地址空间、主存和其它, 又是一个可独立调度和分派的基本单位。在有了线程以后,资源拥有单位称为进程 (或任务) ,调度的单位称为线程、又称轻进程(Light Weight Process,LWP) 。 多线程的进程在同一地址空间内包括多个不同的控制流,也即属于同一进程下 的线程,它们共享进程拥有的资源,如代码、数据、文件等。线程也独占一些资源, 如堆栈、程序计数器等。 多线程系统的优点包括对用户响应的改进,进程内的资源共享,以及利用多处 理器体系结构的便利。从实现的角度看,把线程分为用户级线程和内核级线程。 用户级线程对程序员来说是可见的,而对内核来说是未知的,用户空间的线程库通
26

常用以管理用户级线程,线程库提供对线程创建、调度和管理的支持。 内核级线程由操作系统支持和管理,在内核空间实现线程创建、调度和管理。 用户级线程与内核级线程相比,优点是创建和管理要更快;缺点是得到 CPU 的 时间更少,当一个线程阻塞时,连累其它线程全部阻塞。

三、 共享内存变量访问中冲突的现象
1. 关于线程同步与互斥
当并发执行的线程共享数据时,各线程会改写共享的数据,由于 CPU 调度顺序 的不确定性,造成线程运行结果的不确定性。所以,必须为共享数据的一组相互协 作的线程提供互斥。一种思想是确保在任何时刻最多只能有一个线程执行这些访问 共享数据的代码。这就是临界区互斥问题。 线程在并发执行时为了保证结果的可再现性,各线程执行序列必须加以限制以 保证互斥地使用临界资源,相互合作完成任务。多个相关线程在执行次序上的协调 称为线程同步。用于保证多个线程在执行次序上的协调关系的相应机制称为线程同 步机制。 Pthread 线程库提供了多种方式来处理线程同步互斥机制,最常用的是互斥锁、 条件变量和信号量。

2. C 语言程序编写

27

3. 程序执行

28

编译并运行程序:结果是 10 。我们创建两个线程,counter 的初值为 0,各自 把 counter 增加 10 次,正常情况下最后 counter 应该等于 20

四、实验总结
通过本次实验,我学会了在 Linux 下使用 C 语言操作线程的方法,了解了线程和 进程的区别,对于理解 Linux 的核心非常有帮助。

29

实验报告
组别 实验项目名称 姓名
实验六网络编程

张正锟

同组实验者 实验日期
第 16 周周四 9,10 节

教师评语 实验成绩 指导教师

一、 实验目标
? 理解端口及 Socket 的基本概念 ? 掌握面向连接的 TCP 编程 ? 掌握面向非连接的 UDP 编程 ? 了解I/O 多路利用的控制 ? 了解复杂网络程序的实现

二、 协议概述
1. TCP/IP 协议
TCP/IP 协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际 协议,又叫网络通信协议。 TCP/IP 是 20 世纪 70 年代中期美国国防部为其 ARPANET 广域网开发的网络体系 结构和协议标准,以它为基础组建的 Internet 是目前国际上规模最大的计算机网络。 正因为 Internet 的广泛使用,使得 TCP/IP 成了事实上的标准。 TCP/IP 虽然叫传输控制协议(TCP)和网际协议(IP) ,但实际上是一组协议,它
30

包含了上百个功能的协议,如 ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP 等,这 些协议一起被称为 TCP/IP 协议。

2. UDP 和 TCP 协议
TCP 与 UDP 是两种不同的网络传输方式。两个不同计算机中的程序,使用 IP 地 址和端口,要使用一种约定的方法进行数据传输。主要的区别是进行数据传输时是 否进行连接。 TCP:TCP 是一种面向连接的网络传输方式。这种方式可以理解为打电话。计算 机 A 先呼叫计算机 B,计算机 B 接受连接后发出确认信息,计算机 A 收到确认信息 以后发送信息,计算机 B 完成数据接收以后发送完毕信息,这时再关闭数据连接。 所以 TCP 是面向连接的可靠的信息传输方式。这种方式是可靠的,缺点是传输过程 复杂,需要占用较多的网络资源。 UDP:UDP 是一种不面向连接的传输方式。可以简章理解成邮寄信件。将信件封 装放入邮筒以后,不再参预邮件的传送过程。使用 UDP 传送信息时,不建立连接, 直接把信息发送到网络上,由网络完成信息的传送。信息传递完成以后也不发送确 认信息。这种传输方式是不可靠的,但是有很好的传输效率。对传输可靠性要求不 高时,可以选择使用这种传输方式。

3. 套接字
Socket 是网络编程的一种接口,它是一种特殊的 I/O。 在 TCP/IP 协议中, “IP 地址+TCP 或 UDP 端口号”可以唯一标识网络通讯中的一 个进程,可以简单地认为: “IP 地址+端口号”就称为 socket。 在 TCP 协议中,建立连接的两个进程各自有一个 socket 来标识,这两个 socket 组成的 socket 对就唯一标识一个连接。用 socket 函数建立一个 socket 连接,此函数
31

返回一个整型的 socket 描述符,随后进行数据传输。 一个完整的 socket 有一个本地唯一的 socket 号,由操作系统分配。最重要的是, socket 是面向客户/服务器模型而设计的。 通常,socket 分为三种类型:流式 socket、数据报 socket 和原始 socket。 注意:一个完整的 socket 有一个本地唯一的 socket 号,由操作系统分配。最重要 的是,socket 是面向客户/服务器模型而设计的。

三、 设计服务器-客户端通信程序
1. 编写服务端程序
#include <netinet/in.h> #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <string.h> /* #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> */ #define HELLO_WORLD_SERVER_PORT #define LENGTH_OF_LISTEN_QUEUE 20 #define BUFFER_SIZE 1024 #define FILE_NAME_MAX_SIZE 512 6666 // for sockaddr_in // for socket // for socket // for printf // for exit // for bzero

int main(int argc, char **argv) { //设置一个 socket 地址结构 server_addr,代表服务器 internet 地址, 端口 struct sockaddr_in server_addr; bzero(&server_addr,sizeof(server_addr)); //把一段内存区的内容全部设置为 0 server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htons(INADDR_ANY);

32

server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);

//创建用于 internet 的流协议(TCP)socket,用 server_socket 代表服务器 socket int server_socket = socket(PF_INET,SOCK_STREAM,0); if( server_socket < 0) { printf("Create Socket Failed!"); exit(1); } { int opt =1; setsockopt(server_socket,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); }

//把 socket 和 socket 地址结构联系起来 if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr))) { printf("Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT); exit(1); }

//server_socket 用于监听 if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) ) { printf("Server Listen Failed!"); exit(1); } while (1) //服务器端要一直运行 { //定义客户端的 socket 地址结构 client_addr struct sockaddr_in client_addr; socklen_t length = sizeof(client_addr);

//接受一个到 server_socket 代表的 socket 的一个连接 //如果没有连接请求,就等待到有连接请求--这是 accept 函数的特性 //accept 函数返回一个新的 socket,这个 socket(new_server_socket)用于同连接到的客户的通信 //new_server_socket 代表了服务器和客户端之间的一个通信通道 //accept 函数把连接到的客户端信息填写到客户端的 socket 地址结构 client_addr 中 int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);

33

if ( new_server_socket < 0) { printf("Server Accept Failed!\n"); break; }

char buffer[BUFFER_SIZE]; bzero(buffer, BUFFER_SIZE); length = recv(new_server_socket,buffer,BUFFER_SIZE,0); if (length < 0) { printf("Server Recieve Data Failed!\n"); break; } char file_name[FILE_NAME_MAX_SIZE+1]; bzero(file_name, FILE_NAME_MAX_SIZE+1); strncpy(file_name, strlen(buffer)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(buffer)); // // int fp = open(file_name, O_RDONLY); if( fp < 0 ) printf("%s\n",file_name); FILE * fp = fopen(file_name,"r"); if(NULL == fp ) { printf("File:\t%s Not Found\n", file_name); } else { bzero(buffer, BUFFER_SIZE); int file_block_length = 0; // while( (file_block_length = read(fp,buffer,BUFFER_SIZE))>0) while( (file_block_length = fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0) { printf("file_block_length = %d\n",file_block_length); //发送 buffer 中的字符串到 new_server_socket,实际是给客户端 if(send(new_server_socket,buffer,file_block_length,0)<0) { printf("Send File:\t%s Failed\n", file_name); break; buffer,

34

} bzero(buffer, BUFFER_SIZE); } // close(fp); fclose(fp); printf("File:\t%s Transfer Finished\n",file_name); } //关闭与客户端的连接 close(new_server_socket); } //关闭监听用的 socket close(server_socket); return 0; }

2. 编写客户端程序
#include <netinet/in.h> #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <string.h> /* #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> */ // for sockaddr_in // for socket // for socket // for printf // for exit // for bzero

#define HELLO_WORLD_SERVER_PORT #define BUFFER_SIZE 1024 #define FILE_NAME_MAX_SIZE 512

6666

int main(int argc, char **argv) { if (argc != 2) { printf("Usage: ./%s ServerIPAddress\n",argv[0]); exit(1);

35

}

//设置一个 socket 地址结构 client_addr,代表客户机 internet 地址, 端口 struct sockaddr_in client_addr; bzero(&client_addr,sizeof(client_addr)); //把一段内存区的内容全部设置为 0 client_addr.sin_family = AF_INET; //internet 协议族

client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY 表示自动获取本机地址 client_addr.sin_port = htons(0); //0 表示让系统自动分配一个空闲端口

//创建用于 internet 的流协议(TCP)socket,用 client_socket 代表客户机 socket int client_socket = socket(AF_INET,SOCK_STREAM,0); if( client_socket < 0) { printf("Create Socket Failed!\n"); exit(1); } //把客户机的 socket 和客户机的 socket 地址结构联系起来 if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr))) { printf("Client Bind Port Failed!\n"); exit(1); }

//设置一个 socket 地址结构 server_addr,代表服务器的 internet 地址, 端口 struct sockaddr_in server_addr; bzero(&server_addr,sizeof(server_addr)); server_addr.sin_family = AF_INET; if(inet_aton(argv[1],&server_addr.sin_addr) == 0) //服务器的 IP 地址来自程序的参数 { printf("Server IP Address Error!\n"); exit(1); } server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT); socklen_t server_addr_length = sizeof(server_addr); //向服务器发起连接,连接成功后 client_socket 代表了客户机和服务器的一个 socket 连接 if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) < 0) { printf("Can Not Connect To %s!\n",argv[1]); exit(1); }

36

char file_name[FILE_NAME_MAX_SIZE+1]; bzero(file_name, FILE_NAME_MAX_SIZE+1); printf("Please Input File Name On Server:\t"); scanf("%s", file_name);

char buffer[BUFFER_SIZE]; bzero(buffer,BUFFER_SIZE); strncpy(buffer, file_name, strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name)); //向服务器发送 buffer 中的数据 send(client_socket,buffer,BUFFER_SIZE,0);

// //

int fp = open(file_name, O_WRONLY|O_CREAT); if( fp < 0 ) FILE * fp = fopen(file_name,"w"); if(NULL == fp ) { printf("File:\t%s Can Not Open To Write\n", file_name); exit(1); }

//从服务器接收数据到 buffer 中 bzero(buffer,BUFFER_SIZE); int length = 0; while( length = recv(client_socket,buffer,BUFFER_SIZE,0)) { if(length < 0) { printf("Recieve Data From Server %s Failed!\n", argv[1]); break; } // int write_length = write(fp, buffer,length); int write_length = fwrite(buffer,sizeof(char),length,fp); if (write_length<length) { printf("File:\t%s Write Failed\n", file_name); break; } bzero(buffer,BUFFER_SIZE);

37

} printf("Recieve File:\t %s From Server[%s] Finished\n",file_name, argv[1]);

close(fp); //关闭 socket close(client_socket); return 0; }

3. 测试结果
当同时运行客户端和服务端程序后,只要在客户端建立一个帐号,双方就可以 收发数据了。

四、 实验总结
通过本次实验,我学会了在 Linux 操作系统下,设计服务端和客户端程序的基本 方法,了解了 socket 通信的重要性,同时也复习了在《计算机网络》中学到的 TCP、 UDP、IP 和端口等知识。

38


Linux课程大作业

Linux 课程设计报告 题院班姓 目系级名 Linux 课程大作业 指导教师 一、基础篇(给出源程序和编译运行的结果) 1、编写一个简单的 c 语言程序: 根据输入的两...

(20111305408)Linux大作业_图文

(20111305408)Linux大作业_计算机软件及应用_IT/计算机_专业资料。linux 大作业 学年论文(Linux 实践,课程设计) 题作学 目: 者: 号: Linux 操作系统的安全性 ...

Linux应用开发期末大作业

Linux应用开发期末大作业_计算机硬件及网络_IT/计算机...项目分析报告 学院:软件学院 班级:14 软件设计一班...感觉如果说每节理论课对应的实验课上 的实验还是...

linux大作业

linux大作业_计算机软件及应用_IT/计算机_专业资料。...(PXA270 的 GPIO97) 3、实现过程在实验八的基础...在 Linux 下使用 Qt Designer 设计 QT 程序界面 ?...

linux大作业

操作系统实验报告实验 1:Linux 基本命令使用 : 实验目的:了解 Linux 字符界面的...脚本编程的基本程序结构如循环结构,条件判断等,能进行简单 shell 脚本的程序设计...

linux大作业_图文

linux大作业_计算机软件及应用_IT/计算机_专业资料。...Linux 继承了 Unix 以网络为核心的设计思想,是一个...2006. [14] 孙培旺,毛海敏.基于vmware的linux实验...

LINUX大作业

Linux 系统编程大作业一、实验题目实现一个 FTP ...连同试 验报告打包,命名格式为:学号 1#学号 2.....2、 答辩的 ppt,包括:设计思路和流程图(包括主要...

linux大作业

仲恺农业工程学院 Linux 课程大作业报告院 (系) :...1. Bourne shell:贝尔实验室开发。 2. BASH: GNU...3、设计 shell 脚本程序,要求用户对/home 目录下的...

Linux期末大作业

简单的 IRC 聊天程序—— Linux 课程期末实验 第一章 概述【实验目的】 实验目的】综合应用 Linux 系统下的网络编程技术,使用 C 语言,结合软件工程思想,设计并实...

linux操作系统大作业题目

Linux 操作系统大作业题目 起评分高的题目:80-90 1. 通过源码编译,对 linux 的内核进行升级。 2. linux 内核模块编程实例。 起评分低的题目:70-80 3. 安装...