文档库 最新最全的文档下载
当前位置:文档库 › Linux期末大作业

Linux期末大作业

Linux期末大作业
Linux期末大作业

简单的IRC聊天程序

—— Linux课程期末实验

第一章概述

【实验目的】

综合应用Linux系统下的网络编程技术,使用C语言,结合软件工程思想,设计并实现一个简单的IRC聊天程序,具有服务器端和客户端,可以是终端字符界面,支持用户管理,用户名/密码注册和登录,支持版面聊天,用户可以选择进入某个版面,版面发言大家可以看到,同时支持点对点私聊,可以选择某个用户进行私聊。从而熟悉在Linux系统所提供的网络通信接口及该系统下的编程思想,深入对计算机系统的理解,并切实提高软件设计开发的能力。

【实验原理】

一个简单的聊天室,其功能是当这个聊天室中的任何一个用户输入一段字符后,室内的其他用户都可以看到这句话。据此,聊天程序分为客户端和服务器端。客户端对应每一个参加聊天的用户,完成从终端上输入采集并传递到服务器端和从服务器端接收信息输出显示的功能。

总体介绍该结构如下。

首先是初始化服务器,使服务器进入监听状态:

sockfd = socket(AF_INET, SOCK_STREAM, 0);

// 首先建立一个socket,族为AF_INET,类型为SOCK_STREAM。

// AF_INET = ARPA Internet protocols,即使用TCP/IP协议族。

// SOCK_STREAM类型提供了顺序的,可靠的,基于字节流的全双工连接。

// 由于该协议族中只有一个协议,因此第三个参数为0。

bind(sockfd, (struct sockaddr *)&servaddr,

sizeof(serv_addr));

// 再将这个socket与某个地址进行绑定。

// serv_addr 包括sin_family=AF_INET 协议族同socket。

// sin_addr.s_addr = htonl(INADDR_ANY)服务器所接收的所有其他地址

// 请求建立的连接。

// sin_port = htons(SERV_TCP_PORT) 服务器所监听的端口。

listen(socket, MAX_CLIENT);

// 地址绑定后,服务器进入监听状态。

// MAX_CLIENT是可以同时建立连接的客户总数。

服务器进入监听状态后,等待客户建立连接。若客户需要连接,也需要先进行网络部分的初始化工作:

sockfd = socket(AF_INET, SOCK_STREAM, 0);

// 与服务器端相同。

connect(sockfd, (struct sockaddr *)

&serv_addr, sizeof(serv_addr))

// 客户使用connect建立一个连接。

// serv_addr中的变量分别设置为:

// sin_family = AF_INET 协议族同socket

// sin_addr.s_addr = inet_addr(SERV_HOST_ADDR)

// 地址为server所在的计算机地址,本程序中为127.0.0.1

// sin_port = htons(SERV_TCP_PORT)端口为服务器监听的端口。

当客户建立新连接的时候,服务器使用accept来接收该连接:

accept(sockfd, (struct sockaddr *)&cli_addr, &cli_len);

// 在函数返回时,cli_addr中保留的是该连接对方的信息

// 包括IP地址和对方使用的端口。

// accept返回一个新的文件描述符。

在服务器进入监听状态以后,使用select方法实现,该方法中的所有描述符都是阻塞的。使用select判断一组文件描述符中时候有一个可读(写),如果没有就阻塞。直到有一个的时候被唤醒。

客户端实现如下:

由于要处理两个文件描述符,因此需要判断是否有可读写的文件描述符需要加入两项:

FD_ZERO(sockset);

// 将sockset清空。

FD_SET(sockfd, sockset);

// 把sockfd加入到sockset集合中。

FD_SET(0, sockset);

// 把标准输入(0)加入到sockset集合中。

然后客户处理如下:

while(不想退出) {

select(sockfd+1, &sockset, NULL, NULL, NULL);

// 此时该函数使进程阻塞,直到标准输入或者sockfd中有一个可读为止

// 第一个参数是0和sockfd中的最大值加1

// 第二个参数是读集合,也就是sockset

// 第三、四个参数是写集,在本程序中都为空

// 第五个参数为超时时间,即在指定的时间仍然没有可读,则报错并返回。

// 当该参数被设置为NULL时,超时时间为无限长。

// 当select因为可读返回时,sockset中包含的只是

// 可读的那些文件描述符。

if (FD_ISSET(sockfd, &sockset)){

// FD_ISSET这个宏判断sockfd是否属于可读的文件描述符

/*

* 从sockfd中读入,输出到标准输出上去。

*/

}

if (FD_ISSET(0, &sockset)) {

/*

* 从标准读入中读入,输出到sockfd上去。

*/

}

* 重新设置sockset。(即:将sockset清空,并将sockfd和0加入)

*/

}

下面是服务器的情况:设置sockset如下:

FD_ZREO(sockset);

FD_SET(sockfd, sockset);

for (所有有效连接) {

FD_SET(userfd[i], sockset);

}

max = 最爱文件描述符+1;

服务器处理如下:

while(1) {

select(maxfd, &sockset, NULL, NULL, NULL);

if (FD_ISSET(sockfd, &sockset)) {

// 有新连接

/*

* 建立新连接,并将该描述符加入到sockset中

*/

}

for (所有有效连接) {

if (FD_ISSET(userfd[i], sockset)) {

// 该连接中有字符可读

/*

* 从该连接中读取字符,并发送给其他有效连接

*/

}

}

/*

* 重新设置sockset;

}

读写文件函数如下:

read(userfd[i], line, MAX_LINE);

// userfd[i]是指第i个用户连接的文件描述符

// line是指读出的字符存放位置

// MAX_LINE是一次最多读出的字符数

// 返回值是实际读出的字符数

write(userfd[i], line, strlen(line));

// userfd[i]是指第i个用户连接的文件描述符

// line是指要发送的字符串

// strlen(line)是要发送的字符串长度

// 返回值是实际发送的字符数

【实验环境】

1. 操作系统环境:Ubuntu-10.04 Linux

2. 集成开发环境:Eclipse

第二章分析【用例图–服务器端】

【用例图–客户端】

第三章设计

【服务器端】

1. 初始化网络接口

int init_serv(int port)

{

int SERV_TCP_PORT;

int sockfd;

struct sockaddr_in serv_addr;

SERV_TCP_PORT = port;

if ((sockfd=socket(AF_INET, SOCK_STREAM, 0)) < 0) {

print ‘初始化失败’;

return 0;

}

bzero((char *) &serv_addr, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

serv_addr.sin_port = htons(SERV_TCP_PORT);

if (bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)

{

print ‘无法绑定网络地址,初始化失败’;

return 0;

}

return sockfd; // seccess

}

2. 从文件中读入用户信息

int get_users(User users[])

{

FILE *usersPtr; // 声明文件指针

int i = 0; // 声明循环变量

if ((usersPtr=fopen("users", "r")) == NULL)

// 如果打开文件流失败

{

输出错误信息

}

else

{

while(!feof(usersPtr))

{

将文件中的数据逐次读入变量users中;

i++;

}

fclose(usersPtr); // 关闭文件流

return i+1; // 返回用户个数

}

}

3. 处理登录事务

if (strncmp(line, "%login#", 6) == 0)

{

从line中读出username信息和passwd信息;

遍历users(即从文件中读出的所有用户信息),核对用户名密码是否正确;

if (正确)

{

获取所有版块信息并组成字符串;

向该客户端发送版块信息;

}

else

{

向用户发送登录失败的消息;

}

}

4. 处理注册事务

if (strncmp(line, "%regis", 6) == 0)

{

获取注册用户名;

遍历users(即从文件中读出的所有用户信息),判断该用户名是否已经被注册,若未被注册,则添加;

if (没有被注册过)

{

用户个数++;

获取所有版块信息并组成字符串;

向该客户端发送版块信息;

}

else

{

向用户发送注册失败的消息; }

}

5. 处理私聊事务

if (strncmp(line, "%priva#", 6) == 0)

{

flag = 1;

从line中读出username信息和passwd信息;

for (j=0; j

{

if (该用户名存在 && 该用户在线)

{

将line组装成

{private}[users[j].username];

flag = 0;

}

}

if (flag == 1)

{

向users[i]发送:

{private}[system]user not exists or not on line\n;

}

}

6. 处理群聊事务

if (strncmp(line, "%publi#", 6) == 0)

{

从line中读出需要发送的群聊信息;

将line组装成

{public}[users[i].username];

for (j=0; j

{

if (在该版块的所有在线用户)

{

发送聊天信息;

}

}

}

【客户端】

1. 初始化网络接口

int init_cli()

// --- return sockfd if seccessed, else return 0

{

int sockfd;

int SERV_TCP_PORT;

struct sockaddr_in serv_addr;

SERV_TCP_PORT = 5000;

bzero((char *)&serv_addr, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

serv_addr.sin_port = htons(SERV_TCP_PORT);

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

{

print ‘初始化失败’;

return 0;

}

if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)

{

print ‘无法绑定网络地址,初始化失败’;

return 0;

}

return sockfd;

}

2. 登录

int login(char * str, char * username, char * passwd, int sockfd, fd_set sockset, Module modules[])

{

int result = -1;

char ch = 'Y';

char message = 'A';

int message_size = 0;

while (ch=='Y' || ch=='y')

{

ch = 'N';

将str组装成%login#username#passwd的形式;

message = get_check_message(str, sockfd, sockset,

modules); // 将str发送至服务器端进行验证

if (message == 'A')

{

print ‘无法获取服务器端信息,失败!’;

result = -1;

}

else if (message == '0')

{

print ‘登录成功!’;

result = 0;

}

else

{

print ‘用户名或密码错误’;

print ‘是否重试?’;

scanf("%c", &ch);

while (ch!='N' && ch!='n' && ch!='Y' && ch!='y')

{

print ‘输入有误’;

print ‘是否重试?’;

scanf("%c", &ch);

}

}

}

return result;

}

3. 注册

int regist(char * str, char * username, char * passwd, int sockfd, fd_set sockset, Module modules[])

{

int result = -1;

char ch = 'N';

char message = 'A';

int message_size = 0;

while (ch=='Y' || ch=='y')

{

将str组装成%login#username#passwd的形式;

message = get_check_message(str, sockfd, sockset,

modules); // 将str发送至服务器端进行验证

if (message == 'A')

{

print ‘无法获取服务器端信息,失败!’;

result = -1;

}

else if (message == '0')

{

print ‘注册成功!’;;

result = 0;

}

else

{

print ‘用户名已存在’;

print ‘是否重试?’;、

scanf("%c", &ch);

while (ch!='N' && ch!='n' && ch!='Y' && ch!='y')

{

print ‘输入有误’;

print ‘是否重试?’;

scanf("%c", &ch);

}

}

}

return result;

}

4. 聊天

int chat(int status, char * str, int sockfd, fd_set * sockset, char * username)

{

int result = 1;

int i, j;

char str1[MAX_LINE];

while (1)

{

select(sockfd+1, sockset, NULL, NULL, NULL);

// 使用select判断一组文件描述符中时候有一个可读(写),

// 如果没有就阻塞。直到有一个的时候被唤醒。

if (FD_ISSET(sockfd, sockset))

// 若该信息是来自服务器端

{

status = read(sockfd, str, MAX_LINE);

if (status > 0)

{

显示该信息; }

}

if (FD_ISSET(0, sockset))

// 若该信息来自标准输入

{

status = read(0, str, MAX_LINE);

str[status] = '\0';

if (str[0]=='q')

{

// 向服务器端发送离开此版消息

write(sockfd,"%outrm#", strlen("%outrm#"));

result = 0;

break;

}

if (str[0] == '@')

// 判断为私聊信息

{

将该信息组装成‘%priva#username#infomation’形式;

}

else

{

将该信息组装成‘%publi#username#infomation’形式;

}

if (write(sockfd, str, strlen(str)) != strlen(str))

// 向服务器端发送聊天信息

{

print ‘发送失败!’;

}

}

清空sockset;

}

return result;

}

第四章实现

【欢迎】

【登录】

【注册】

【进入版块】

【群聊】

【查看当前在线用户】

【私聊】

【离开版块】

【注销登录】

【退出系统】

第五章运行说明

服务端:

【安装运行】

1. 进入命令行,使用cd命令进入到Server_Linux目录下;

2. 输入make命令,等待命令行输出“Finished building target:

Server_Linux”字样;

3. 在命令行输入“./Server”即可启动服务器程序。

【卸载】

若需要卸载服务器端程序,在Server_Linux目录下输入“make clean”命令即可卸载服务器端程序。

客户端:

【安装运行】

1. 进入命令行,使用cd命令进入到Client_Linux目录下;

2. 使用make命令,等待命令行输出“Finished building target:

Client_Linux”字样;

Linux课程大作业

Linux课程设计报告 题目 Linux课程大作业 院系 班级 姓名 指导教师 一、基础篇(给出源程序和编译运行的结果)

1、编写一个简单的c语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 源代码(c): 源代码(汇编): .file "sum.c" .text .globl average .type average, @function average: .LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $8, %esp movl 12(%ebp), %eax movl 8(%ebp), %edx

addl %edx, %eax movl %eax, -4(%ebp) fildl -4(%ebp) fldl .LC0 fdivrp %st, %st(1) leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE0: .size average, .-average .section .rodata .align 4 .LC2: .string "\350\257\267\350\276\223\345\205\245\344\270\244\344\270\252\346\225\260\ 357\274\214\345\233\236\350\275\246\345\210\206\345\211\262" .LC3: .string "%d" .LC4: .string "%d\344\270\216%d\347\232\204\345\271\263\345\235\207\345\200\274\346\23 0\257\357\274\232%lf\n" .text .globl main .type main, @function main: .LFB1: .cfi_startproc pushl %ebp

Linux期末考试试题8套(含答案)

Linux 期末考试试题(一) 一、选择题 (每小题2分,共50分) 1.在创建Linux分区时,一定要创建(D )两个分区 A. FAT/NTFS B. FAT/SWAP C. NTFS/SWAP D.SW AP/根分区 2.在Red Hat Linux 9中,系统默认的(A)用户对整个系统拥有完全的控制权。 A. root B. guest C. administrator D.supervistor. 3. 当登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么( B ) A. NID B. PID C. UID D. CID 4. 下面哪个命令是用来定义shell的全局变量( D ) A. exportfs B. alias C. exports D. export 5. 哪个目录存放用户密码信息( B ) A. /boot B. /etc C. /var D. /dev 6. 默认情况下管理员创建了一个用户,就会在( B )目录下创建一个用户主目录。 A. /usr B. /home C. /root D. /etc 7. . 当使用mount进行设备或者文件系统挂载的时候,需要用到的设备名称位于( D )目录。 A. /home B. /bin C. /etc D. /dev 8. 如果要列出一个目录下的所有文件需要使用命令行( C )。 A. ls –l B. ls C. ls –a(所有) D. ls –d 9. 哪个命令可以将普通用户转换成超级用户(D ) A. super B. passwd C. tar D. su 10. 除非特别指定,cp假定要拷贝的文件在下面哪个目录下( D ) A. 用户目录 B. home目录 C. root目录 D. 当前目录 11. 在vi编辑器里,命令"dd"用来删除当前的( A ) A. 行 B. 变量 C. 字 D. 字符 12. 当运行在多用户模式下时,用Ctrl+ALT+F*可以切换多少虚拟用户终端( B ) A. 3 B. 6 C. 1 D. 12 13. Linux启动的第一个进程init启动的第一个脚本程序是( B )。 A./etc/rc.d/init.d B./etc/rc.d/rc.sysinit C./etc/rc.d/rc5.d D./etc/rc.d/rc3.d 14. 按下(A )键能终止当前运行的命令 A. Ctrl-C B. Ctrl-F C. Ctrl-B D. Ctrl-D 15. 下面哪个命令用来启动X Window ( C ) A. runx B. Startx C. startX D. xwin 16. 用来分离目录名和文件名的字符是( B ) A. dash (-) B. slash (/) C. period (.) D. asterisk(*) 17. 用"rm -i",系统会提示什么来让你确认( B ) A. 命令行的每个选项 B. 是否真的删除 C. 是否有写的权限 D. 文件的位置 18. 以下哪个命令可以终止一个用户的所有进程( D ) A. skillall B. skill C. kill D. killall 19.在Red Hat Linux 9中,一般用(D )命令来查看网络接口的状态 A. ping B. ipconfig C. winipcfg D ifconfig 20. vi中哪条命令是不保存强制退出( C )(第五章) A. :wq B. :wq! C. :q! D. :quit

《Linux操作系统(第2版))》课后习题答案

《Linux操作系统(第2版)》课后习题答案 1.6 练习题 一、选择题 1.Linux最早是由计算机爱好者 B 开发的。 A.RichardPetersen B.LinusTorvalds C.RobPick D.LinuxSarwar 2. 下列C是自由软件。 A.WindowsXP B.UNIX C.Linux D.Windows2000 3. 下列 B 不是Linux 的特点。 A.多任务 B. 单用户 C.设备独立性 D.开放性 4. Linux的内核版本2.3.20 是 A 的版本。 A.不稳定 B.稳定的 C.第三次修订 D.第二次修订 5. Linux安装过程中的硬盘分区工具是 D 。 A.PQmagic B.FDISK C.FIPS D.DiskDruid 6. Linux的根分区系统类型是C。 A.FATl6 B.FAT32 C.ext4 D.NTFS 二、填空题 1.GNU的含义是:GNU'sNotUNIX。 2 . Linux一般有3个主要部分:内核(kernel)、命令解释层(Shell或其他操作环境)、实用工具。 3 . 安装Linux最少需要两个分区,分别是swap交换分区和/(根)分区。 4 . Linux默认的系统管理员账号是root 。 三、简答题(略) 1.简述RedHatLinux系统的特点,简述一些较为知名的Linux发行版本。 2.Linux有哪些安装方式 ?安装RedHatLinux系统要做哪些准备工作? 3.安装RedHatLinux系统的基本磁盘分区有哪些? 4.RedHatLinux系统支持的文件类型有哪些?

2.6 练习题 一、选择题 1. C 命令能用来查找在文件TESTFILE 中包含四个字符的行? A.grep ’????’TESTFILE B.grep ’?.’TESTFILE C.grep ’^????$’TESTFILE D.grep ’^?.$’TESTFILE 2. B 命令用来显示/home 及其子目录下的文件名。 A.ls-a/home B.ls-R/home C.ls-l/home D.ls-d/home 3. 如果忘记了ls 命令的用法,可以采用 C 命令获得帮助 A.?ls B.helpls C.manls D.getls 4. 查看系统当中所有进程的命令是 D 。 A.psall B.psaix C.psauf D.psaux 5. L inux 中有多个查看文件的命令,如果希望在查看文件内容过程中用光标可以上下移 动来查看文件内容,则符合要求的那一个命令是 C 。 A.cat B.more C.les s D.head 6. C 命令可以了解您在当前目录下还有多大空间。 https://www.wendangku.net/doc/0514897031.html,edf B. Usedu/ https://www.wendangku.net/doc/0514897031.html,edu. D. Usedf. 7. 假如需要找出 /etc/my.con f 文件属于哪个包( package ),可以执行 C 命令。 A. rpm-q/etc/my.conf B.rpm-requires/etc/my.conf C. rpm-qf/etc/my.conf D.rpm-q|grep/etc/my.conf 8. 在应用程序启动时, B 命令设置进程的优先级。 A. priori ty B. nice C. topD.、setpri 9. C 命令可以把 f1.txt 复制为f2.txt ? A.cpf1.txt|f2.t xt B. catf1.txt|f2.txt C.catf1.txt>f2.txt D. copyf1.txt|f2.txt 10. 使用B 命令可以查看Linux 的启动信息。 A. mesg –d B. dmesg C. cat/etc/mesg D. cat/var/mesg 二、填空题 1.在Linux 系统中命令区分大小写。在命令行中,可以使用 Tab 键来自动补齐命令。 2. 如果要在一个命令行上输入和执行多条命令,可以使用分号来分隔命令。 3. 断开一个长命令行,可以使用反斜杠“”,以将一个较长的命令分成多行表达, 增 强 命令的可读性。执行后,Shell 自动显示提示符“>”,表示正在输入一个长命令。 4. 要使程序以后台方式执行,只需在要执行的命令后跟上一个“ &”符号。 三、简答题

LInux嵌入式操作系统期末试题

简答题:请简单概括什么是嵌入式系统、并举出嵌入式系统的特点;(6分) 答: 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可剪裁,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统; 其特点如下: (1)嵌入式系统是面向特定系统应用的。 (2)嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各个行业; 是一个技术密集、资金密集、高度分散、不断创新的知识集成系统; (3)嵌入式系统的硬件和软件都必须具有高度可定制性;只有这样才能适应嵌入式系统应用的需要,在产 品价格和性能方面具备竞争力; (4)嵌入式系统的生命周期相当长。 (5)嵌入式系统不具备本地系统开发能力,通常需要有一套专门的开发工具和环境。 嵌入式操作系统的优势:1.低成本开发系统 2.可应用多种硬件平台 3.可定制内核 4.性能优异 5.良好的网络支持 linux文件类型:1.普通文件2.目录文件3.链接文件4.设备文件a.块设备文件(硬盘:/dev/hda1)b.字符设备(串行端口接口设备) linux文件属性:访问权限:r:可读w:可写x:可执行用户级别:u:文件拥有者g:所属用户组o:其他用户第一个字符显示文件类型:- 普通 d 目录 l 链接… 简答题:(6分) linux目录结构:/bin 存放linux常用操作命令的执行文件(二进制文件) /boot 操作系统启动时所需要的程序 /dev Linux系统中使用的外部设备 /etc 系统管理时所需要的各种配置文件和子目录 /etc/rc.d Linux启动和关闭时要用到的脚本 /etc/rc.d/init Linux默认服务的启动脚本 /home 系统中默认用户工作根目录 /lib 存放系统动态链接共享库 /mnt软驱、光驱、硬盘的挂载点 /proc存放系统核心与执行程序所需信息、 /root超级用户登陆时的主目录 /sbin 存放管理员常用系统管理程序 /usr存放用户应用程序和文件 /var存放日志信息(答六点即可) 编写一个shell文件:创建studen01 –student30这30个用户,用户组为class1,之后编写shell文件,删除所有用户 操作步骤:1.打开Terminal(终端): 2.输入vi shell 3.输入i 进入编辑模式 4.输入 #!/bin/bash groupadd class1 for((i=1;i<10;i++)) do username=student0$i

Linux期末大作业

简单的IRC聊天程序 —— Linux课程期末实验 第一章概述 【实验目的】 综合应用Linux系统下的网络编程技术,使用C语言,结合软件工程思想,设计并实现一个简单的IRC聊天程序,具有服务器端和客户端,可以是终端字符界面,支持用户管理,用户名/密码注册和登录,支持版面聊天,用户可以选择进入某个版面,版面发言大家可以看到,同时支持点对点私聊,可以选择某个用户进行私聊。从而熟悉在Linux系统所提供的网络通信接口及该系统下的编程思想,深入对计算机系统的理解,并切实提高软件设计开发的能力。 【实验原理】 一个简单的聊天室,其功能是当这个聊天室中的任何一个用户输入一段字符后,室内的其他用户都可以看到这句话。据此,聊天程序分为客户端和服务器端。客户端对应每一个参加聊天的用户,完成从终端上输入采集并传递到服务器端和从服务器端接收信息输出显示的功能。 总体介绍该结构如下。 首先是初始化服务器,使服务器进入监听状态: sockfd = socket(AF_INET, SOCK_STREAM, 0); // 首先建立一个socket,族为AF_INET,类型为SOCK_STREAM。 // AF_INET = ARPA Internet protocols,即使用TCP/IP协议族。 // SOCK_STREAM类型提供了顺序的,可靠的,基于字节流的全双工连接。 // 由于该协议族中只有一个协议,因此第三个参数为0。 bind(sockfd, (struct sockaddr *)&servaddr, sizeof(serv_addr)); // 再将这个socket与某个地址进行绑定。

《Linux操作系统》部分习题答案

第一章Linux系统简介 一、思考题 1.UNIX的大部分代码是用一种流行的程序设计语言编写的,该语言是什么? C语言 2.UNIX系统的特点有哪些? ·多任务 ·多用户 ·并行处理能力 ·设备无关性 ·工具 ·错误处理 ·强大的网络功能 ·开放性 3.什么是Linux?其创始人是谁? Linux是一个功能强大的操作系统,同时它也是一个自由软件,是免费的、源代码开放的、可以自由使用的UNIX兼容产品。其创始人是Linus 4.Linux操作系统的诞生、发展和成长过程始终依赖者的重要支柱都有哪些? ·UNIX操作系统 ·MINIX操作系统 ·GNU计划 ·POSIX标准 ·Internet 5.简述Linux系统的特点。 ·自由软件 ·良好的兼容性 ·多用户、多任务 ·良好的界面 ·丰富的网络功能 ·可靠地安全性、稳定性 ·支持多种平台 6.常见的Linux的发行版本有哪些? ·Red Hat Linux ·Caldera OpenLinux ·SuSE Linux ·TurboLinux ·红旗Linux ·中软Linux 二、选择题 1.Linux最初是以MINIX 操作系统为模板而开发出来的。 2.关于Linux内核版本的说法,下列选项中错误的是(C)。 A.表示为主版本号.次版本号.修正号B.1.2.3表示稳定的发行版 C.1.3.3表示稳定的发行版D.2.2.5表示对内核2.2的第5次修正 (补充:次版本号为偶数的是稳定版本;为奇数的则是测试版本。)

3.Linux属于自由软件。 4.自由软件的含义是软件可以自由修改和发布。 5.一下不具有多任务性的操作系统是DOS 第二章Linux系统入门 一、思考题 1.Linux系统有哪些运行级别?其含义是什么? 可用级别为0~6,其中0:关闭系统;6:重新启动,其他略。 2.Linux系统下经常使用的两种桌面环境是什么? GNOME和KDE 3.什么是X-Window系统?它有什么特点? 图形界面(X-Window)是在Linux操作系统中提供的图形化用户界面(GUI),其支持的视窗系统也称为X,它的特点有:它采用了“客户端-服务器”模式;它是一个跨平台的操作环境。 7.默认情况下,超级用户和普通用户的登录提示符分别是什么? # 和$ 二、选择题 1.系统引导的过程一般包括如下的几步:①MBR中的引导装载程序启动。②用户登录。③Linux内核运行。④BIOS自检。正确的顺序是④①③②。 2.Linux中使用Ctrl+Alt+BackSpace 组合键可以关闭X-Window图形用户界面。 3.字符界面下使用init命令关机所用的参数是0 。(参数6是重新启动) 4.字符界面下使用shutdown命令重启计算机时所用的参数是–r 。 5.使用man命令调阅相关的帮助信息时,用于逐页地下翻的功能键是Space 。 第三章shell与shell命令 一、思考题 1.shell的基本功能有哪些? 命令解释执行、文件名替换、输入/输出重定向、连同管道建立、系统环境设置和shell编程。 2.Linux系统中的主要目录有哪些? /:系统的根目录 /dev:系统的设备目录 /home:用户主目录 /root:root用户主目录 /boot:Linux的启动目录 /usr:用户级目录 3.工作目录及其父目录课分别用什么表示? . 和.. 5.常用的shell环境变量有哪些? ·HOME:用户家目录的完全路径名 ·LOGNAME:登录用户名 ·IFS:命令行内部域分割符 ·PATH:由冒号分隔的目录路径名

Linux操作系统期末复习题(含答案)

Linux 期末复习题(一) 一、选择题 (每小题2分,共50分) 2.在Ubuntu Linux中,系统默认的(A)用户对整个系统拥有完全的控制权。 A. root B. guest C. administrator D.supervistor. 3. 当登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么( B ) A. NID B. PID C. UID D. CID 4. 下面哪个命令是用来定义shell的全局变量( D ) A. exportfs B. alias C. exports D. export 5. 哪个目录存放用户密码信息( B ) A. /boot B. /etc C. /var D. /dev 6. 默认情况下管理员创建了一个用户,就会在( B )目录下创建一个用户主目录。 A. /usr B. /home C. /root D. /etc 7. . 当使用mount进行设备或者文件系统挂载的时候,需要用到的设备名称位于( D )目录。 A. /home B. /bin C. /etc D. /dev 8. 如果要列出一个目录下的所有文件需要使用命令行( C )。 A. ls –l B. ls C. ls –a(所有) D. ls –d 9. 哪个命令可以将普通用户转换成超级用户(D ) A. super B. passwd C. tar D. su 10. 除非特别指定,cp假定要拷贝的文件在下面哪个目录下( D ) A. 用户目录 B. home目录 C. root目录 D. 当前目录 11. 在vi编辑器里,命令"dd"用来删除当前的( A ) A. 行 B. 变量 C. 字 D. 字符 14. 按下(A )键能终止当前运行的命令 A. Ctrl-C B. Ctrl-F C. Ctrl-B D. Ctrl-D 17. 用"rm -i",系统会提示什么来让你确认( B ) A. 命令行的每个选项 B. 是否真的删除 C. 是否有写的权限 D. 文件的位置 18. 以下哪个命令可以终止一个用户的所有进程( D ) A. skillall B. skill C. kill D. killall 19.在Ubuntu Linux中,一般用(D )命令来查看网络接口的状态 A. ping B. ipconfig C. winipcfg D ifconfig 20. vi中哪条命令是不保存强制退出( C )(第五章) A. :wq B. :wq! C. :q! D. :quit 22.在下列分区中,Linux默认的分区是(B ) A. FAT32 B. EXT3 C FAT .D NTFS 24.如果用户想对某一命令详细的了解,可用(C) A. ls B. help (内部) C. man(列举的信息多) D dir 二、填空题 (每空1分,共10分) 26. 在Linux系统中,以_文件的_方式访问设备。 29. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限644,该文件属性是目录。 30. 静态路由设定后,若网络拓扑结构发生变化,需由__系统管理员___修改路由的设置。 33. 编写的Shell程序运行前必须赋予该脚本文件__执行___权限。

《Linux操作系统》期末大作业任务书2019

大作业任务书 课程名称:Linux操作系统 题目:Linux期末大作业 专业:计算机科学与技术 班级:计算机185班 学号:6109118148 学生姓名:全昊 完成人数: 起讫日期: 任课教师:李荣鑫职称:副教授 完成时间: 说明 1.本任务书由任课教师填写后,下达到学生。 2.任务完成后,任课教师需填写小结表。 3.任务书、学生成绩与学生完成后的大作业(纸质和电子两种)一 并报送各教学研究部审核后转教务办。 4.另附一份全班大作业总结

《Linux操作系统》期末大作业 (要求将计算机名改为你的名字,以便命令行截图时能看到个人信息,shell编程题的源程序代码的第二行用注释给出个人信息。)1. 写出完成下列操作的Linux命令 (1)给shell脚本文件myshell.sh设置文件主和小组用户拥有可执行权限,其他用户无可执行权限。(若无相应文件可以先创建) #sudo touch mashell.sh #sudo chmod 776 myshell.sh (2)将目录/home/ncu下的所有文件拷贝到/data。(若无相应的目录可以先创建) #sudo cp /home/ncu/* /home/data 拷贝前: (3)安装软件包apache2并查看启动状态。 # sudo apt-get install apache2

(4)将/home/ncu目录打包压缩,生成ncu.tar.gz文件,并将此文件保存到/data目录 #sudo tar -zcvf data/ncu.tar.gz ncu #tar默认使用的是相对路径,如果按照一般习惯书写绝对路径可能导致错误。 (5)删除目录/home/ncu及其下面所有文件。 #rm -rf /home/ncu (6)统计当前目录下普通文件的数目并显示结果。 #ls -lR |grep "^-"|wc -l (7)查询软件mysql是否安装,若没安装,请安装。 #service mysql status 检查数据库服务是否启动 #sudo apt-get install mysql-server

LINUX期末试卷

1、下面不是对Linux操作系统特点描述的是() A、良好的可移植性 B、单用户 C、多用户 D、设备独立性 2、查看创建目录命令mkdir的帮助文档可以使用() A、mkdir -h B、man mkdir C、help mkdir D、info mkdir 3、用标准的输出重定向(>)像”>file01”能使文件file01的数据() A、被复制 B、被移动 C、被覆盖 D、被打印 4、你想显示文件“longfile”的最后10行,下面那个命令是正确的?() A、tail logfile B、head -10 longfile C、taid –d 10longfile D、head longfile 5、下面哪个命令允许对文件重命名() A、rn B、rnamw C、replace D、mv 6、在vi编辑器里,命令“dd”用来删除当前( )。 A、字符 B、行 C、变量 D、字 7、比较重要的系统配置资料,一般来说大部分位于( )目录下。 A、 /etc B、 /boot C、 /home D、 /usr 8、欲把当前目录下的 file1.txt 复制为 file2.txt,正确的命令是() A、copy file1.txt file2.txt B、cat file1.txt > file2.txt C、cat file2.txt file1.txt D、cp file1.txt| file2.txt 9、如何删除一个非空子目录 /tmp。() A、del /tmp/* B、rm -rf /tmp C、rm -Ra /tmp/* D、rm –rf /tmp/* 10、下面哪个命令不能用来显示文本的内容() A、more B、less C、find D、cat 11、一个文件名字为file.gz,可以用哪个命令来解压缩。() A、tar B、gzip C、compress D、bzip2 12、删除文件命令为() A、mkdir B、move C、mv D、rm 13、在给定文件中查找与设定条件相符字符串的命令为() A、grep B、gzip C、find D、sort 14、Linux有三个查看文件的命令,若希望在查看文件内容过程中可以用光标上下移动来查看文件内容,应使用命令() A、cat B、more C、less D、menu 15、在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项() A、-m B、-p C、-f D、-d 16、关闭linux系统(不重新启动)可使用-命令() A、ctrl+alt+del B、shutdown -r C、halt D、reboot 17、对文件进行归档的命令为() A、gzip B、tar C、dump D、dd 18、下列那一个指令可以设定使用者的密码() A、pwd B、newpwd C、passwd D、password 19、cron 后台常驻程序 (daemon) 用于: a. 负责文件在网络中的共享 b. 管理打印子系统manages the printing subsystem c. 跟踪管理系统信息和错误 d. 管理系统日常任务的调度 (scheduling) 20、下面哪个linux命令可以一次显示一页内容? a. pause b. cat c. more d. grep 21、Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于外部设备文件,

linux网络操作系统大作业

1.搭建一个简单的apache+mysql+php组合:点击红帽子—>系统设置-->服务器设置 服务勾上httpd然后点开始之后保存,如图: 在浏览器测试如图:

打开文件夹file:/var/www/html 在其中建一个about.php的文件,代码如下: 打开浏览器测试如图: 点击红帽子—>系统设置-->服务器设置 服务勾上mysqld然后点开始之后保存,然后在终端输入如图所示代码,给MYSQL设定密码,如图:

2.根据题目要求需要数据库中建立学生个人信息(学号、性别、年龄),所修课成,所在院系三个表,不是独立的。所以我建了一个名为php的数据库以及名为register(用户),student(学生),faculty(学院),course(课程)的数据表,代码如下: CREATE TABLE IF NOT EXISTS student ( name varchar(30) NOT NULL, id int(30) NOT NULL, class char(30) NOT NULL, sex varchar(30) NOT NULL, age int(20) NOT NULL ); CREATE TABLE IF NOT EXISTS register ( username char(25) NOT NULL, password int(20) NOT NULL ); INSERT INTO register VALUES('admin','111111'); CREATE TABLE IF NOT EXISTS course ( id int(30) NOT NULL, classname char(30) NOT NULL, classid int(20) NOT NULL, teacher varchar(30) NOT NULL, socre int(10) NOT NULL ); CREATE TABLE IF NOT EXISTS faculty ( id int(30) NOT NULL, name char(30) NOT NULL, academical char(30) NOT NULL ); 建数据库及数据表如图:

linux大作业

仲恺农业工程学院Linux课程大作业报告 院(系):信息科学与技术学院 专业班级:计算机 学号: 姓名:

目录 1 简述题目 (1) 2 shell程序设计 (5) 2.1 程序设计要求 (5) 2.2 程序设计内容 (5) 1 (5) 2 (10) 3 (11) 5 (13) 6 (16) 3 文件和目录部分 (17) 3.1 程序设计要求 (17) 3.2 程序设计内容 (17) 2 (17) 3 (17) 6 (18) 8 (19) 9 (19) 4 进程和信号部分 (20) 4.1 程序设计要求 (20) 4.2 程序设计内容 (20) 1 (20) 2 (21) 8 (22) 9 (23) 10 (24) 5 网络编程部分 (25) 5.1 程序设计要求 (25) 5.2 程序设计内容 (25) 2 (25) 3 (26)

1 简述题目 1、makefile文件的作用是什么,makefile文件中有一种变量,其值是根据具体的规则来确定的,称为自动变量,其中代表所有依赖文件列表的是哪个;举例说明make命令的工作流程。 答:(1)makefile的作用就是使得源文件修改的时候,能很快地自动编译和链接所有修改过的文件。Make工具可将编译和链接的步骤按一定的规则写入文本文件。(2)是指冒号后面的那一列(3)举例:现在有lib.h,lib.c,mod.c,app.h,app.c,main.c文件,编译链接成main.o 程序示例: #script5-2_makefile Appexam:main.o app.o mod.o lib.o gcc –o apexam main.o app.o mod.o lib.o main.o:main.c app.h gcc –c main.c app.o:app.c app.h gcc –c app.c mod.o:mod.c gcc –c mod.c lib.o:lib.c lib.h gcc –c lib.c clean: rm –f *.o 2、什么是进程,用fork()创建一个子进程时,系统会做什么工作。请编程说明。答:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。在linux系统中,每个进程都有各自的生命周期。在一个进程的生命周期中,都有各自的运行环境以及所需的资源。一个进程程可以由多个线程组成,线程独自拥有的资源很小,但是系统运行的最小单位。 当通过fork函数创建心得子进程时,内核将父进程的用户地址空间的内容复制给子进程,这样父子进程之间拥有各自的用户空间,当父进程修改变量的值时不会影响子进程中的相应变量。但为了提高效率,Linux采用了COW(Copy on Write)算法,子进程创建时,父子进程享有相同的地址空间只是在页表中设置COW标志,只有在父进程或子进程执行写数据操作时,才为子进程申请一个物理页,将父进程空间中相应数据所在页的内容复制到该物理页,然后将该页映射至子进程用户地址空间的适当位置。此外,子进程还继承父进程的其他资源。 举例说明: #include intglob=10; int main(void) { int local;

linux操作系统(课后习题答案)

1.简述linux的内核版本号的构成。答:由3个部分数字构成,其形式如下 major:表示主版本号,通常在一段时间内比较稳定。minor:表示次版本号,如果是偶数,代表这个内核版本是正式版本,可以公开发行;而如果是奇数,则代表这个内核版本是测试版本,还不太稳定仅供测试。patchlevel:表示修改号,这个数字越大,则表明修改的次数越多,版本相对更完善。 2.如何理解linux发行版本含义它由哪些基本软件构成 答:linux的基础是其内核,但光有内核是无法满足用户需要的,必须构成发行套件,即发行版。 系统引导管理程序(Boot Manager、用户界面、X-Window系统、系统管理、Internet服务、文件和打印服务、应用程序、工具和库程序的运用领域主要有哪些答:Intranet 、服务器、嵌入式系统、集群计算机等方面主要特点。 答:多用户、多任务、多平台、漂亮的用户界面、硬件支持、强大的通信和联网功能、应用程序支持 Window由哪3个部分组成分别有何功能 答:Server(服务器)、Client(客服端)、通信通道 Server:控制实际显示器和输入设备的程序。Client:Client是使用系统窗口功能的一些应用程序。通信通道:负责Server与Client之间的信息传输。 5.什么是桌面环境linux下的桌面环境主要有哪两种 答:为用户管理系统、配置系统、运行应用程序等提供统一的操作平台。Linux最常用的桌面环境:KDE和GNOME。 6.在GNOME桌面环境下如何获取帮助信息 答:(1)GNOME桌面环境提供帮助浏览器程序help,单击【主菜单】——【帮助】命令即可启动,单击文字链接可查看相关的联机帮助信息。(2)如果已安装文档光盘,则可单击【主菜单】——【文档】命令,选择查看已安装的文档。(3)当运行运用程序时,单击该程序的【帮助】——【目录】或者【目录内容】也可查看该程序的帮助信息。(4)默认情况下linux所安装的每一个应用程序都会在/usr/share/doc目录下放置该程序的帮助信息文件。因此,用户可直接浏览次目录中相关程序的帮助信息。 7.如何从GNOME桌面环境切换到KDE桌面环境答:在GNOME中启动运行命令,然后输入命令switchdesk,打开switchdesk桌面切换工具,然后选择KDE命令,设置完成后需要重新启动系统才生效。 O设备怎样分类从资源的角度来看,I/O设备可分为哪几类设备 答:按设备的所属关系两类:系统设备、用户设备。按设备的信息交换的单位两类:字符设备、块设备。 按设备的共享属性可分为三类:独占设备、共享设备、虚拟设备。 9.设备管理的目标和功能是什么 答:选择和分配I/O设备以便进行数据传输操作。控制I/O设备和CPU(或内存)之间交换数据。为用户提供一个友好的透明接口,把用户和设备硬件特性分开,使得用户在编制应用程序时不必涉及具体设备,由系统按用户的要求来对设备的工作进行控制。提高设备和设备之间、CPU和设备之间以及进程和进程之间的并行操作程度,以使操作系统获得最佳效率。功能:提供和进程管理系统的接口、进行设备分配、实现设备和设备、设备和CPU等之间的并行操作、进行缓冲管理、设备控制与驱动 10.什么是DMA方式简述采用DMA方式进行数据传输的过程。 答:DMA方式是:在外部设备和内存之间开辟直接的数据交换通路。(1)外设可通过DMA控制器向CPU发出DMA请求:(2)CPU响应DMA请求,系统转变为DMA工作方式,并把总线控制权交给DMA控制器;(3)由DMA控制器发送存储器地址,并决定传送数据块的长度;(4)执行DMA传送; (5)DMA操作结束,并把总线控制权交还CPU。 11.什么叫通道技术通道的作用是什么 答:通道是独立于中央处理器的,专门负责数据I/O传输工作的理单元。通道对外部设备实行统一管理,它代替CPU对I/O操作进行控制,从而使CPU和外部设备可以并行工作。所以通道又称为I/O处理机。 12.什么是缓冲为什么要引入缓冲答:缓冲技术是用在外部设备与其他硬件部件之间的一种数据暂存技术,它利用存储器件在外部设备中

Linux操作系统期末复习资料

电信2012级《Linux操作系统》期末复习提纲第1章概述 操作系统的概念与功能 操作系統的概念: 1.操作系统是计算机系统的一种基本软件,它直接管理和控制计算机的硬件和软件资源,合理地调度资源,使之得到充分的利用;并为用户使用这些资源提供一个便当的操作环境和优良的用户界面。 2.从资源角度看,操作系统是管理和控制计算机资源的软件。 3.从用户角度看,操作系统是用户与计算机的接口。 操作系統的功能: 1.处理器管理:在多道程序间分配和调度CPU,协调各程序的运行。 2.存储器管理:对内存储器进行分配、保护和扩充。 3.设备管理:对设备进行有用地管理和分配,并控制设备完成I/O操作。 4.文件管理:管理文件的存储和检索操作,并对文件实施共享、保密和保护措施。 5.用户接口:提供使用界面,便当用户使用系统功能。 Linux系统的特点 1.继承UNIX优秀品质,具有出色的性能和稳定性; 2.遵照GPL许可,自由软件; 3.符合POSIX标准,兼容性好; 4.适用于各种硬件平台,可移植性好; 5.网络功能强大;

6.安全性好。第2章Linux操作基础 命令的格式; 命令名[选项1] [选项2] ... [参数1] [参数2] ... 简单命令的功能与用法:echo、who、date、cal 文件系统概念: 文件命名与通配符 1.文件的命名:Linux文件名的最大长度是255个字符,通常由字母、数字、‘.’、‘_’和‘-’组成。以‘.’开头的文件是隐含文件。 2.文件名中不能含有‘/ ’字符和空字符‘\0’,因为它们对Linux内核具有分外含义。如‘/ ’表示根目录或路径分隔符。 3.文件名中不应含有以下字符,因为它们对Shell具有分外含义:; | < > ` “ “$ ! % & * ? \ ( ) [ ] 文件类型及表示法 1.普通文件(-):包括文本文件、数据文件、可执行的二进制程序等。 2.目录文件(d):一种分外的文件,用于构成文件系统的分层树型结构。 每个目录文件中至少包括两个文件,“..”表示上一级目录,“.”表示该目录本身。 3.设备文件:一种分外文件,Linux系统利用它们来标识各个设备驱动器,核心使用它们与硬件设备通信。有两类特别的设备文件:字符设备(c)和块设备(b)。 文件(包括目录)权限的含义及表示法(字符和数字表示法)

linux大作业

2014 —2015 学年第二学期《Linux网络操作系统》大作业题目:浅谈 Linux 新技术及其发展 专业:计算机科学与技术 班级:12级计算机1班 学号: 120400301 姓名:郭芳瑜 教师:李桐 日期:2015 年05 月10 日

一.linux的发展历程 Linux 是一种自由和开放源码的类 Unix 操作系统.目前存在着许多不同的 Linux,但其都使用了 Linux 内核. Linux 可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机. Linux 是一个领先的操作系统,世界上运算速度最快的计算机运行的都是 Linux 操作系统。 Linux 操作系统的诞生、发展和成长过程始终依赖着以下 5 大支柱: UNIX 操作系统、MINIX 操作系统、GNU 计划、POSIX 标准和 Internet 网络. Unix 操作系统是美国 AT&T 的贝尔实验室的 Ken. Thompson,Dennis Ritchie 和 Douglas Mcllroy 于 1969年夏在 DEC PPP - 7 小型计算机上开发的一个分时操作系统. 1971 年 Ken. Thompson 和 Dennis Ritchie 成功地用 C 语言重写了 Unix 内核. 1974 年,Unix 以“仅用于教育目的”的协议,提供给大学作为教学之用,成为当时操作系统课程中的范例教材.各大学、公司开始通过 Unix 源码对Unix 进行了各种各样的改进和扩展,于是,Unix 开始广泛流行.后来,AT&T 公司开始注意到 Unix 带来的商业价值,公司的律师开始寻找一些手段来保护 Unix,并让其成为一种商业机密.从 1979 年 Unix 的版本 V7 开始,Unix 的许可证开始禁止大学使用 Unix 的源码,包括在授课中学习. MINIX 系统是由美藉荷兰侨民 Andrew. S. Tanenbaum( AST) 于 1987 年开发的,源于 Unix 源码被禁止使用,开发该系统主要用于学生学习操作系统原理. MINIX 的名称取自英语 Mini Unix,是一个迷你版本的类 Unix 操作系统,它是重新发展的,并没有使用任何的 AT&T 的程序码,到 1991 年时版本是 1. 5,当时该操作系统在大学使用是免费的,但其它用途不是,当然目前都已经是免费的. GNU 是“GNU’s Not Unix”的递归缩写,是一个名叫 Richard Stallman 认为 Unix 是一个相当好的操作系统,如果大家都能将自已所学贡献出来,那么,这个系统将会更加优异.他倡导的 Open Source 的概念,就是针对 Unix 这一事实,反对实验室里的产品商业化、私有化.实现一个仿 Unix 操作系统成了他追求的明确战略目标.为了这个理想,Richard Stallman 于 1984 年创立了 GNU,计划开发一套与 Unix 相互兼容的软件. 1985年,他又创立了自由软件基金会( Free Software Foundation) 来为 GNU 计划提供技术、法律以及财政支持.自发起这个计划以来,GNU 开始大量的产生或收集各种系统所必备的组件,例如: 函数库、编译器、调试工具、文本编辑器、网站服务器,以及一个 Unix 的使用接口( Unix Shell) 等,但由于种种原因,GNU 一直没有开发操作系统的 Kernel. POSIX 表示可移植操作系统接口( Portable Operating System Interface) ,电气与电子工程师协会( Institute of Electrical and Electronics Engineers,IEEE) 最初开发 POSIX 标准,是为了提高Unix 环境下应用程序的可移植性.然而,POSIX 并不局限于 Unix,许多其它操作系统,例如,DEC Open VMS 和 Microsoft Windows NT 都支持 POSIX 标准现在它已经发展成为一个非常庞大的标准族.1991 年,芬兰赫尔辛基大学的一名学生 Linus Torvalds,他主修的课程中有一门课是操作系统,专门研究程序设计和执行,并且本课程采用 MINIX 做为实验系统. Linus 不满足于该系统的功能,就希望能给其添加一些功能.于是,他就根据实际的需要编写了磁盘驱动程序以便下载访问新闻组的文件,又编写了文件系统以便能够阅读 MINIX 文件系统中的文件,这就是 0. 0. 1 版本的 Linux.Linus 从一开始就决定自由传播 Linux,他把源代码发布在网上,于是,众多的爱好者和程序员也都通过互联网加入到 Linux 的内核开发工作中.这个思想与 FSF 资助发起的 GNU 的自由软件精神不谋而合. GNU 是为了推广自由软件的精神以实现一个自由的操作系统,然后从应用程序开始,实现其内核.而当时 Linux 的优良性能备受 GNU 的赏识,于是,GNU 就决定采用 Linus 及其开发的内核.在他们共同努力下, Linux 这个完整的操作系统诞生了.其中的程序开发共同遵守 General Public License( GPL) 协议和POSIX 标准,规定了源码必须可以无偿地获取并且修改. 二.Linux技术热点和发展趋势 自九十年代初 L i n u x 出现以后,Linux技术首先在个人爱好者的圈子里迅速发展起来;此后,随着Internet的迅猛发展,以及在RedHat、Suse等主要Linux发行商的努力和 IBM、英特尔等的大力支持下,Linux在服务器端得到了长足的发展,在中、低端服务器市场中已经成为Unix 和 Windows NT的有力的竞争对手在高端应用的某些方面,如SMP、Cluster集群等,已经动摇了传统高级 Unix 的统治地位。近两年,由于政府上网工程、电子政务、电子商务等的不断发展,Linux桌面技术也越来越受到用户和厂家的重视。特别是在国内,中标软件、红旗等相继推出了多款Linux桌面产品,在政府采购、OEM 等领域占据了重要市场,Linux桌面技术也得到了长足的发展。目前,Linux技术已经成为IT技术发展的热点,投身于Linux技术研究的社区、研究机构和软件企业越来越多,支持Linux 的软件、硬件制造商和解决方案提供商也迅速增加,Linux在信息化建设中的应用范围也越来越广,Linux产业链已初步形成,并正在得到持续的完善。随着整个 Linux 产业的发展,Linux技术也处在快速的发展过程中,形成了若干了技术热点。下面,分别就 Linux 桌面技术和Linux服务器技术介绍最新的Linux发展动态和未来的发展趋势。

相关文档