Linux操作系统实验教程(7)

2019-05-26 21:01

-f 强迫删除文件,不询问用户

-r 递归删除。(将参数中列出的全部目录和子目录删除) -i 进行交互式删除

7)more命令:每次以一个page显示

一般和别的命令用管道符配合使用。例如: ls -l |more

8)cat命令: 显示文件的内容

cat data.txt 显示文件的内容

9)移动或更改文件名的mv命令

mv data.txt .. 移动文件 mv data1.txt data2.txt 更改文件名 10)显示目前所在目录的pwd命令

pwd

11)重定向与管道符

| 管道操作,前一个命令的输出是后一个命令的输入

〉 可将结果输出到文件中,如果该文件原来就存在,则该文件原有内容

会被删除。

》 将结果附加到文件后面,原文件内容不会被清除。 ls –l > dir.txt

cat data1.txt>> all_data.txt 12)chmod命令:修改文件的权限 chmod u+rwx file1 chmod u-x file1 chmod g+rw,o+r file1 //同组用户对file1增加权限是可读、可写,其它用户则只能读

chmod 700 file1

13)ps命令: 查询正在执行的进程

(2)输入以下程序并执行,体会shell编程技巧

启动Linux,输入用户名和密码;“系统工具/终端”进入shell,在提示符下键入 vi ex1.sh,回车,进入vim编辑系统,按I,或a或o进入输入模式,键入该程序,结束后,按Esc键进入命令模式,按“:”进入最后行模式,按wq回车,存盘并退出vim,在shell下执行ex1.sh程序.

1)输入下列程序并存为文件ex1.sh #!/bin/csh

var=”hello” echo$var

echo”The program $0 is now running ” echo”The first parameter was $1” echo”The second parameter was $2” echo”The parameter list was $*”

31

echo”The user’s home directory is $HOME” echo”please enter a new word” read var echo $var exit 0

键入‖sh ex1.sh one two thre‖ 或 ‖sh>ex1.sh one two thre‖ 运行结果为:

Hello

The program ex1.sh is now running The first parameter wse one The second parameter wse two The parameter list wse one two thre The user‘s home directory is /home/y Please enter a new word Baby Baby

2)输入下列程序并存为文件ex2.sh

#!/bin/csh count=1

While test $count –le 5 do

echo ”here is cycle” count=$(($count+1)) done exit 0

运行结果为:here is cyle

here is cyle here is cyle here is cyle here is cyle

实验二 进程管理

3、实验内容 (1)参考程序

# include main()

{ int p1, p2;

while((p1=fork())= = -1);

32

if(p1= =0)

putchar(?b‘); else

{ while((p2=fork())= =-1); if(p2= =0) putchar(?c‘); else

putchar( ?a‘); } }

在shell提示符下键入vi jc1.c,进入vi编辑状态,在此状态下输入上述程序。完毕后按ESC键,按:,键入wq,推出vi。

在shell提示符下键入 cd /usr/bin

gcc296 –o /home/y/jc1.out /home/y/jc1.c cd

执行程序: ./jc1.out 运行结果:bca

(2) # include

main()

{ int p1, p2, i;

while((p1=fork())== -1); if(p1==0)

for(i=0;i<5;i++)

printf(“child%d\\n”,i); else

{ while((p2=fork())==-1); if(p2==0)

for(i=0;i<5;i++)

printf(“son%d\\n”,i); else

for(i=0;i<5;i++)

printf(“daughter%d\\n”,i); } } 操作同上 运行结果: child0 child1 child2 child3 child4 son0 son1

33

son2 son3 son4

daughter0 daughter1 daughter2 daughter3 daughter4

在程序中加入系统调用lockf()

#include main()

{ int p1, p2, i;

while((p1=fork())== -1); if(p1==0) {

lockf(1,1,0); /*加锁,这里第一个参数为stdout(标准输出设备的描述符)*/ for(i=0;i<5;i++)

printf(“child%d\\n”,i);

lockf(1,0,0); /*解锁*/ }

else

{ while((p2=fork())==-1); if(p2==0)

{

lockf(1,1,0); /*加锁*/ for(i=0;i<5;i++)

printf(“son%d\\n”,i);

lockf(1,0,0); /*解锁*/ }

else {

lockf(1,1,0); /*加锁*/ for(i=0;i<5;i++)

printf(“daughter%d\\n”,i); lockf(1,0,0); /*解锁*/

}

} }

运行结果和上一个相同

分析:因为上述程序执行时,不同进程之间不存在共享临界资源问题,所以加

锁与不加锁效果相同。 (3)

1)编制一段程序,使其实现进程的软中断通信。

34

要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止。

Child Processl1 is killed by Parent! Child Processl2 is killed by Parent!

父进程等待两个子进程终止后,输出下列信息后终止。 Parent Process is Killed!

参考程序:

#include #include #include void waiting( ),stop( ); int wait_mark; main() {

int p1,p2;

while((p1=fork())==-1); if(p1>0) {

while((p2=fork())==-1); if(p2>0) {

wait_mark=1;

signal(SIGINT,stop); waiting(0); kill(p1,16); kill(p2,17); wait(0);

wait(0);

printf(―parent process is killed!\\n‖); exit(0); } else

{

wait_mark=1; signal(17,stop); waiting( ); lockf(stdout,1,0);

printf(―child process2 is killed by parent!\\n‖); lockf(stdout,0,0);

exit(0);

}

35


Linux操作系统实验教程(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:CRTS III型板式无砟轨道毕业设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: