Linux结课作业.docx

上传人:b****6 文档编号:5942893 上传时间:2023-01-02 格式:DOCX 页数:20 大小:383.83KB
下载 相关 举报
Linux结课作业.docx_第1页
第1页 / 共20页
Linux结课作业.docx_第2页
第2页 / 共20页
Linux结课作业.docx_第3页
第3页 / 共20页
Linux结课作业.docx_第4页
第4页 / 共20页
Linux结课作业.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

Linux结课作业.docx

《Linux结课作业.docx》由会员分享,可在线阅读,更多相关《Linux结课作业.docx(20页珍藏版)》请在冰豆网上搜索。

Linux结课作业.docx

Linux结课作业

一、Shell编程   要求:

写出两个Shell程序,每个程序不少于十五行;说明程序主要功能;每行给出注释。

#MajorFunction:

simplecalculatorfor+-#/

#

#Time:

SundayMay5,2013

#

#copyright:

#!

/bin/bash

#!

/bin/sh

main()

{

echo"calculatorV1.0"

#选择操作方式helporcalulateorexit

while[1]

do

readselect

if["$select"="help"]

then

echo"1calculator"

echo"0exit"

elif["$select"="1"]

then

cal;

elif["$select"="0"]

then

break;

fi

done

}

cal()

{

readstr

#针对读入的字串,提取操作数及操作符

num1=`echo$str|cut-d''-f1`

num2=`echo$str|cut-d''-f3`

sign=`echo$str|cut-d''-f2`

#根据sign选择对应操作+-#/

case$signin

+)

sum=`expr$num1+$num2`;

echo"$num1$sign$num2=$sum";;

-)

sum=`expr$num1-$num2`;

echo"$num1$sign$num2=$sum";;

\#)

sum=`expr$num1\*$num2`;

echo"$num1*$num2=$sum";;

/)

sum=`expr$num1/$num2`;

echo"$num1$sign$num2=$sum";;

esac

}

main

 

#!

/bin/bash

#数字游戏

random()

{

FLOOR=0

RANGE=10

num=0

while[$num-le$FLOOR]

do

num=$RANDOM

#通过使随机数成为指定范围的随机数

let"num%=$RANGE"

done

#echo"Randomnumberbetween$FLOORand$RANGE---$number"

return

}

random

########################

D1=$num

random

D2=$num

while[$D2==$D1]

dorandom

D2=$num

done

random

D3=$num

while[$D3==$D2]||[$D3==$D1]

dorandom

D3=$num

done

random

D4=$num

while[$D4==$D3]||[$D4==$D2]||[$D4==$D1]

dorandom

D4=$num

done

#echo$D1$D2$D3$D4#########Thisisfortest

input_num()

{

#输入四个数据并判断比较对错情况返回?

A?

B

echo

echo"Pleaseinputfourdifferentnumbersbetween1~9(Justlikethis\"5214\")"

readS1S2S3S4

}

zero()

{

while[$S1==0]||[$S2==0]||[$S3==0]||[$S4==0]

doecho"zeroisnotallowd"

input_num

done

}

input_num

zero

while[$S1==$S2]||[$S1==$S3]||[$S1==$S4]||[$S2==$S3]||[$S2==$S4]||[$S3==$S4]

doecho"wronginput"

input_num

done

echo$S1$S2$S3$S4

declareA

declareB

#比较函数

compare()

{

A=0

B=0

if[$S1==$D1]

thenletA=$A+1

elif[$S1==$D2]||[$S1==$D3]||[$S1==$D4]

thenletB=$B+1

fi

if[$S2==$D2]

thenletA=$A+1

elif[$S2==$D1]||[$S2==$D3]||[$S2==$D4]

thenletB=$B+1

fi

if[$S3==$D3]

thenletA=$A+1

elif[$S3==$D1]||[$S3==$D2]||[$S3==$D4]

thenletB=$B+1

fi

if[$S4==$D4]

thenletA=$A+1

elif[$S4==$D1]||[$S4==$D2]||[$S4==$D3]

thenletB=$B+1

fi

clear

echo"$S1$S2$S3$S4$A"A"$B"B"">>~/answ.txt

/bin/cat~/answ.txt

while[$A-lt4]

doinput_num

compare

done

if[$A==4]

thenecho"Congratulation,youareverygood"

fi

return

}

compare

二、Linux操作系统配置实例   要求:

查阅资料结合实际使用情况,写出Linux操作系统使用中的一个配置的详细过程;具体配

置目标不限(自选)。

1、Linux下安装MySQL需要下面两个文件:

MySQL-server-5.1.7-0.i386.rpmmysql

  2、Linux下安装MySQL

  rpm文件是RedHat公司开发的软件安装包,rpm可让Linux在安装软件包时免除许多复杂的手续。

该命令在安装时常用的参数是–ivh,其中i表示将安装指定的rmp软件包,V表示安装时的详细信息,h表示在安装期间出现“#”符号来显示目前的安装过程。

这个符号将持续到安装完成后才停止。

  1)安装服务器端

  在有两个rmp文件的目录下运行如下命令:

  [root@test1local]#rpm-ivhMySQL-server-5.1.7-0.i386.rpmMySQL-client-5.1.7-0.i386.rpm  

显示如下信息。

warning:

MySQL-server-5.1.7-0.i386.rpm

signature:

NOKEY,keyID5072e1f5

  Preparing...       ###########################################[100%]

  1:

MySQL-server     ###########################################[100%]

   。

(省略显示)

  /usr/bin/mysqladmin-urootpassword'new-password'

  /usr/bin/mysqladmin-uroot-htest1password'new-password'

   。

(省略显示)

  Startingmysqlddaemonwithdatabasesfrom/var/lib/mysql

  如出现如上信息,服务端安装完毕。

测试是否成功可运行netstat看Mysql端口是否打开,如打开表示服务已经启动,安装成功。

Mysql默认的端口是3306。

  [root@test1local]#netstat-nat

  ActiveInternetconnections(serversandestablished)

  ProtoRecv-QSend-QLocalAddress     ForeignAddress    State   

  tcp  0  00.0.0.0:

3306    0.0.0.0:

*     LISTEN   

  上面显示可以看出MySQL服务已经启动。

  2)安装客户端

  运行如下命令:

  [root@test1local]#rpm-ivhMySQL-client-5.1.7-0.i386.rpm

  warning:

MySQL-client-5.1.7-0.i386.rpm:

V3DSAsignature:

NOKEY,keyID5072e1f5

  Preparing...    ###########################################[100%]

  1:

MySQL-client ###########################################[100%]

  显示安装完毕。

  用下面的命令连接mysql,测试是否成功。

 3、登录MySQL

  登录MySQL的命令是mysql,mysql的使用语法如下:

  mysql[-uusername][-hhost][-p[password]][dbname]

  username与password分别是MySQL的用户名与密码,mysql的初始管理帐号是root,没有密码,注意:

这个root用户不是Linux的系统用户。

MySQL默认用户是root,由于初始没有密码,第一次进时只需键入mysql即可。

  [root@test1local]#mysql

  WelcometotheMySQLmonitor. Commandsendwith;or\g.

  YourMySQLconnectionidis1toserverversion:

4.0.16-standard

  Type'help;'or'\h'forhelp.Type'\c'toclearthebuffer.

  mysql>

  出现了“mysql>”提示符,恭喜你,安装成功!

  增加了密码后的登录格式如下:

  mysql-uroot-p

  Enterpassword:

(输入密码)

  其中-u后跟的是用户名,-p要求输入密码,回车后在输入密码处输入密码。

  注意:

这个mysql文件在/usr/bin目录下,与后面讲的启动文件/etc/init.d/mysql不是一个文件。

三、Linux操作系统应用开发实例   要求:

编写Linux下的一个应用程序。

开发语言和工具不限;给出源代码和运行结果。

关键代码部分要给出注释。

通过

Tcpserver

classTcpServer:

publicQDialog

{

Q_OBJECT

public:

explicitTcpServer(QWidget*parent=0);

~TcpServer();

voidrefused();

voidinitServer();

protected:

voidchangeEvent(QEvent*e);

private:

Ui:

:

TcpServer*ui;

qint16tcpPort;

QTcpServer*tcpServer;

QStringfileName;

QStringtheFileName;

QFile*localFile;

qint64TotalBytes;

qint64bytesWritten;

qint64bytesToWrite;

qint64loadSize;

QByteArrayoutBlock;//缓存一次发送的数据

QTcpSocket*clientConnection;

QTimetime;//计时器

privateslots:

voidon_serverSendBtn_clicked();

voidon_serverCloseBtn_clicked();

voidon_serverOpenBtn_clicked();

voidsendMessage();

voidupdateClientProgress(qint64numBytes);

signals:

voidsendFileName(QStringfileName);

};

Tcpclient

classTcpClient:

publicQDialog

{

Q_OBJECT

public:

explicitTcpClient(QWidget*parent=0);

~TcpClient();

voidsetHostAddress(QHostAddressaddress);

voidsetFileName(QStringfileName){localFile=newQFile(fileName);}

protected:

voidchangeEvent(QEvent*e);

private:

Ui:

:

TcpClient*ui;

QTcpSocket*tcpClient;

quint16blockSize;

QHostAddresshostAddress;

qint16tcpPort;

qint64TotalBytes;

qint64bytesReceived;

qint64bytesToReceive;

qint64fileNameSize;

QStringfileName;

QFile*localFile;

QByteArrayinBlock;

QTimetime;

privateslots:

voidon_tcpClientCancleBtn_clicked();

voidon_tcpClientCloseBtn_clicked();

voidnewConnect();

voidreadMessage();

voiddisplayError(QAbstractSocket:

:

SocketError);

};

实现:

chat:

:

chat(QStringpasvusername,QStringpasvuserip):

ui(newUi:

:

chat)

{

ui->setupUi(this);

ui->textEdit->setFocusPolicy(Qt:

:

StrongFocus);

ui->textBrowser->setFocusPolicy(Qt:

:

NoFocus);

ui->textEdit->setFocus();

ui->textEdit->installEventFilter(this);

a=0;

is_opened=false;

//this->is_opened=false;

xpasvusername=pasvusername;

xpasvuserip=pasvuserip;

ui->label->setText(tr("与%1聊天中对方IP:

%2").arg(xpasvusername).arg(pasvuserip));

//UDP部分

xchat=newQUdpSocket(this);

xport=45456;

//xchat->bind(xport,QUdpSocket:

:

ShareAddress|QUdpSocket:

:

ReuseAddressHint);

xchat->bind(QHostAddress:

:

QHostAddress(getIP()),xport);

connect(xchat,SIGNAL(readyRead()),this,SLOT(processPendingDatagrams()));

//TCP部分

server=newTcpServer(this);

connect(server,SIGNAL(sendFileName(QString)),this,SLOT(sentFileName(QString)));

connect(ui->textEdit,SIGNAL(currentCharFormatChanged(QTextCharFormat)),this,SLOT(currentFormatChanged(constQTextCharFormat)));

}

chat:

:

~chat()

{

is_opened=false;

deleteui;

}

boolchat:

:

eventFilter(QObject*target,QEvent*event)

{

if(target==ui->textEdit)

{

if(event->type()==QEvent:

:

KeyPress)//按下键盘某键

{

QKeyEvent*k=static_cast(event);

if(k->key()==Qt:

:

Key_Return)//回车键

{

on_send_clicked();

returntrue;

}

}

}

returnQWidget:

:

eventFilter(target,event);

}

//处理用户离开

voidchat:

:

participantLeft(QStringuserName,QStringlocalHostName,QStringtime)

{

ui->textBrowser->setTextColor(Qt:

:

gray);

ui->textBrowser->setCurrentFont(QFont("TimesNewRoman",10));

ui->textBrowser->append(tr("%1于%2离开!

").arg(userName).arg(time));

}

QStringchat:

:

getUserName()//获取用户名

{

QStringListenvVariables;

envVariables<<"USERNAME.*"<<"USER.*"<<"USERDOMAIN.*"

<<"HOSTNAME.*"<<"DOMAINNAME.*";

QStringListenvironment=QProcess:

:

systemEnvironment();

foreach(QStringstring,envVariables)

{

intindex=environment.indexOf(QRegExp(string));

if(index!

=-1)

{

QStringListstringList=environment.at(index).split('=');

if(stringList.size()==2)

{

returnstringList.at

(1);

break;

}

}

}

returnfalse;

}

QStringchat:

:

getIP()//获取ip地址

{

QListlist=QNetworkInterface:

:

allAddresses();

foreach(QHostAddressaddress,list)

{

if(address.protocol()==QAbstractSocket:

:

IPv4Protocol)//我们使用IPv4地址

returnaddress.toString();

}

return0;

}

voidchat:

:

hasPendingFile(QStringuserName,QStringserverAddress,//接收文件

QStringclientAddress,QStringfileName)

{

QStringipAddress=getIP();

if(ipAddress==clientAddress)

{

intbtn=QMessageBox:

:

information(this,tr("接受文件"),

tr("来自%1(%2)的文件:

%3,是否接收?

")

.arg(userName).arg(serverAddress).arg(fileName),

QMessageBox:

:

Yes,QMessageBox:

:

No);

if(btn==QMessageBox:

:

Yes)

{

QStringname=QFileDialog:

:

getSaveFileName(0,tr("保存文件"),fileName);

if(!

name.isEmpty())

{

TcpClient*client=newTcpClient(this);

client->setFileName(name);

client->setHostAddress(QHostAddress(serverAddress));

client->show();

}

}

else{

sendMessage(Refuse,serverAddress);

}

}

}

以上是主要源码未包含局域网广播ip列表获取及udp实现部分

4、linux内核源码解读

Linux信号机制

1.信号的来源

程序错误:

除零,非法内存访问…

外部信号:

终端Ctrl-C产生SGINT信号,定时器到期产生SIGALRM…

显式请求:

kill函数允许进程发送任何信号给其他进程或进程组。

2.Linux下查看信号

在Linux下,可以通过以下命令查看系统所有的信号:

kill-l

可以通过类似下面的命令显式的给一个进程发送一个信号:

kill-2pid

3.信号的处理

忽略信

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1