2023年Linu程序設(shè)計實驗報告大作業(yè)_第1頁
2023年Linu程序設(shè)計實驗報告大作業(yè)_第2頁
2023年Linu程序設(shè)計實驗報告大作業(yè)_第3頁
2023年Linu程序設(shè)計實驗報告大作業(yè)_第4頁
2023年Linu程序設(shè)計實驗報告大作業(yè)_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

實驗報告

課程名稱:_______LINUX程序設(shè)計__________________

學(xué)院:計算機(jī)學(xué)院___________________

專業(yè):軟件工程班級:14—3

姓名:張正銀學(xué)號:一

2023年1月1日

山東科技大學(xué)教務(wù)處制

實驗報告

組別姓名張正餛同組實驗者

第11周周四

實驗項目名稱實驗一熟悉Linux命令實驗日期

9,10節(jié)

教師評語

實驗成績指導(dǎo)教師

一、實驗?zāi)康?/p>

熟悉并掌握Linux操作系統(tǒng)基本命令

二、常用的普通命令

1.了解系統(tǒng)的uname,date,w命令

kun@vm:~$uname-a

Linuxvn4.4.0-31-generic#50-UbuntuSMPWedJul1300:07:12UTC2016x86_64x86

_64x86_64GNU/Ltnux

kun@vm:-$date

2016年12月28日星期三16:53:36CST

kun@vm:~$w

16:53:42up12min,1user,loadaverage:0.06,0.21,0.28

USERTTYFROMLOGIN@IDLEJCPUPCPUWHAT

kuntty7:016:4112:354.91s0.53s/sbin/upstart?

kun@vn:~$|

2.了解文獻(xiàn)的Is和fiIe命令

kun@vn:-$Is

DesktopDownloadsLearnPicturesTemplates

Documentsexamples.desktopMusicPublicVideos

kun@vm:-$fileexamples.desktop

examples.desktop:UTF-8Unicodetext

kun@vm:~$

3.cat,1ess,head,tail,nbwc等命令的使用

kun@vm:-$catmy.c

#include<stdio.h>

#include<unistd.h>

intmain(){

printf(**ptd:%d\nH,getpid());

printf("ppid:%d\nn,getppid());

return0;

kun@vm:-$tail-n3my.c

p「tntf("pptd:%d\n",getppid());

return0;

)

kun@vm:~$head-n3my.c

#include<stdio.h>

#include<unistd.h>

kun@vn:~$nlmy.c

1#Include<stdio.h>

2/Include<unistd.h>

3

4intmain(){

5printf(,'pid:%d\nH,getpid());

6printf("pptd:%d\n",getppid());

7return0;

8}

kun@vm:-$wcmy.c

814140my.c

4.文本內(nèi)容查找grep命令

kun@vn:~$catmy.c|grepinclude

#include<stdio.h>

winclude<unistd.h>

5.文獻(xiàn)權(quán)限的修改chmod,chown,umask

cun@vn:-$Is-Imy.c

-rw-r--r--1kunkun14012月2817:01ny.c

cun@vn:*$sudochmod777my.c

:sudo]passwordforkun:

<un@vn:~$Is-Imy.c

?rwxrwxrwx1kunkun14012月2817:01ny.c

cun@vn:-$sudochownroot:rootmy.c

cun@vm:-$Is-Imy.c

-rwxrwxrwx1rootroot14012月2817:01my.c

cun@vn:-$|

6.文獻(xiàn)夾操作:mkdir,rmdir

kun@vm:~5Is

DesktopDownloadsLearnPicturesTemplates

Documentsexamples.desktopMusicPublicVideos

kun@vm:~$mkdtrdtrl

kun@vm:~$Is

Desktop1Documentsexamples.desktop)MusicPublicVideos

dtrl1DownloadsLearnPicturesTemplates

kun@vm:~5rmdirdtrl/

kun@vm:~5Is

DesktopDownloadsLearnPicturesTemplates

Documentsexamples.desktopMusicPublicVideos

kun@vm:*$

三、用戶和組的管理管理

1.探究用戶配置文獻(xiàn)/etc/passwd,/etc/shadow

kun@vm:-*$sudotail-n5/etc/passwd

pulse:x:117:124:PulseAudtodaemon,,,:/var/run/pulse:/btn/false

rtkit:x:118:126:RealttmeKit,,,:/proc:/bin/false

saned:x:119:127::/var/ltb/saned:/btn/false

usbmux:x:120:46:usbmuxdaemon,,f:/var/ltb/usbmux:/btn/false

kun:x:1000:10OO:kun,,,:/home/kun:/bin/bash

kun0vm:sudotail-n5/etc/shadow

pulse:*:17001:0:99999:7:::

rtkit:*:17001:0:99999:7:::

saned:*:17001:0:99999:7:::

usbmux:*:17001:0:99999:7:::

kun:$6$/4hN636M$3yCKhbKmCQ23wNlF01Zh.mtkm3.R/Yxr3IXk2ehFoYsNUMR7w7ZldSnc

e75s6kbMVwidgP8r5IBLz.:17150:0:99999:7:::

kun@vn:~$|

/etc/passwd是用戶數(shù)據(jù)庫,其中的域給出了用戶名、加密口令和用戶的其

他信息./etc/shadow是在安裝了影子(shadow)口令軟件的系統(tǒng)上的影子口令文

獻(xiàn)。影子口令文獻(xiàn)將/etc/passwd文獻(xiàn)中的加密口令移動到/etc/shadow中,而后者

只對超級用戶(root)可讀。這使破譯口令更困難,以此增長系統(tǒng)的安全性。

2.探究組配置文獻(xiàn)組的配置文獻(xiàn)/etc/group,/etc/gshadow

kun@vm:-$sudotail-n5/etc/group

pulse-access:x:125:

rtkit:x:126:

saned:x:127:

kun:x:1000:

sambashare:x:128:kun

kun@vm:-$sudotail-n5/etc/gshadow

pulse-access:!::

rtkit:!::

saned:!::

kun:!::

sambashare:!::kun

kun@vm:-$

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

kun(bvm:*$id

uid=1000(kun)gid=1000(kun)groups=10O0(kun),4(adm),24(cdrom),27(sudo),3O(dip),4

6(plugdev),113(Ipadmtn),128(sambashare)

kun@vm:~$who

kuntty72016-12-2910:05(:0)

kun0vm:~$whoamt

kun

kun@vm:-$groups

kunadmcdromsudodipplugdevIpadmtnsambashare

kun@VE:~$

四、文獻(xiàn)打包與壓縮

1.tar壓縮和解壓

kun@vm:-$Is

DesktopDownloadsLearnPicturesTemplates

Documentsexamples.desktopMusicPublicVideos

kun@vn:-$tar-zcvflearn.tar.gzLearn/

Learn/

Learn/6-2.c

Learn/6-4

Learn/6-2.o

Learn/6-3.o

Learn/6-4.o

Learn/6-l.c

Learn/6-l.o

Learn/6-4.c

Learn/6-3.c

kun@vm:-$Is

DesktopDownloadsLearnMusicPublicVideos

Documentsexamples.desktoplearn.tar.gzPicturesTemplates

,■Is

DesktopDownloadsLearnMusicPublicVideos

Documentsexamples.desktoplearn.tar.gzPicturesTemplates

kun@vm:~$tar-zxvflearn.tar?gz

Learn/

Learn/6-2c

Learn/6-4

Learn/6-20

Learn/6-30

Learn/6-40

Learn/6-1c

Learn/6-10

Learn/6-4c

Learn/6-3c

五、軟件包管理

1.安裝軟件tree

kun@vm:*$sudoapt-getinstalltree

Readingpackagelists...Done

Buildingdependencytree

Readingstateinformation...Done

ThefollowingNEWpackageswillbeinstalled:

tree

0upgraded,1newlyinstalled,0toremoveand11notupgraded.

Needtoget40.6kBofarchives.

Afterthisoperation,138kBofadditionaldiskspacewillbeused.

Get:1/ubuntuxenial/universeamd64treeamd641.7.0

-3[40.6kB]

Fetched40.6kBin2s(18.5kB/s)

Selectingpreviouslyunselectedpackagetree.

(Readingdatabase???216049filesanddirectoriescurrentlyinstalled.)

Preparingtounpack.../tree_1.7.0-3_amd64.deb,??

Unpackingtree(1.7.0-3)...

Processingtriggersforman-db(2.7.5-1)???

Settinguptree(1.7.0-3)...

?

2.卸載軟件tree

kun@vn:-$sudoapt-getremovetree

Readingpackagelists...Done

Buildingdependencytree

Readingstateinformation...Done

ThefollowingpackageswillbeREMOVED:

tree

0upgraded,0newlyinstalled,1toremoveand11notupgraded.

Afterthisoperation,138kBdiskspacewillbefreed.

Doyouwanttocontinue?[Y/n]y

(Readingdatabase...216055filesanddirectoriescurrentlyinstalled.)

Removingtree(1.7.0-3)???

Processingtriggersforman-db(2.7.5-1)???

kun@vm:-$tree

Theprogram'tree'iscurrentlynotinstalled.Youcaninstallitbytyping:

sudoaptinstalltree

kun@vm:-$

六、進(jìn)程管理

1.top命令動態(tài)顯示進(jìn)程狀態(tài)

top?10:30:18up25min,1user,loadaverage:0.22,0.13,0.13

Tasks:251total,1running,250sleeping,0stopped,0zombie

%Cpu(s):2.3us,3.2sy,0.8nt,89.4id,4.2wa,0.0hi,0.1si,0.0st

KiBMen:2630628total,188516free,625036used,1217076buff/cache

KtBSwap:2694076total,2096840free,3236used.1165776availMem

PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND

1root20011962057163928S0.00.30:03.22systemd

2root200000S0.00.00:00.02kthreadd

3root200000S0.00.00:00.08ksoftirqd+

5root0-26000S0.00.00:60.00kworker/0+

7root200000S6.00.00:01.70rcusched

8root200600S0.00.00:00.00rcubh

9rootrt0000S0.00.00:00.12migrattori^

2.ps命令顯示瞬時進(jìn)程狀態(tài)

ps-aux

USERPID%CPU%MEMvszRSSTTYSTATSTARTTIMECOMMAND

root1196205716Ss10:040:03/sbin/inttspl

root00S10:040:00[kthreadd]

?

root00S510:040:00[ksoftirqd/0]

root007S10:040:00[kworker/0:0H]

root007S10:040:01[rcu_sched]

root007S10:040:00[rcu_bh]

root60?S10:040:00[mtgratton/O]

S

root00S10:040:00[watchdog/0]

root00C10:040:00[watchdog/1]

root00.10:040:00[migration/1]

root0Q710:040:0?rksoftirod/ll

3.KiII命令終止一個進(jìn)程

用gedit打開一個文獻(xiàn)a.cpp并在后臺運營,顯示的進(jìn)程號為17271,然后用kill命令殺死這

個進(jìn)程,觀測到gedit關(guān)閉

kun@vn:~$gedita.cpp&

[1]17271

kun@vn:~$sudokill17271

kun@vm:~$

七、實驗總結(jié)

通過本次實驗,熟悉了好多Linux下面的基本命令,可以看出Linux的命令基本

上都有好多參數(shù)可選,這樣就可以用一條命令完畢好多任務(wù),大大提高效率。此外還

學(xué)會了當(dāng)命令不會使用的時候,可以調(diào)用man來查看命令的使用方法。

《實驗報告

組別姓名張正銀同組實驗者

第12周周四

實驗項目名稱實驗二SheII編程實驗日期

9,10節(jié)

教師評語

實驗成績指導(dǎo)教師

一、實驗?zāi)康?/p>

>掌握Shell命行的運營

>掌握編寫和執(zhí)行She門程序的環(huán)節(jié)

>掌握在Shell中使用參數(shù)和使用變量的方法

>掌握表達(dá)式比較,循環(huán)結(jié)構(gòu)語句和條件結(jié)構(gòu)語句的寫法

>掌握在she11腳本中使用函數(shù)的方法

二、簡樸bash腳本

1.編寫bash腳本

kun@vm:~/Learn$catch2-l.sh

#!/bin/bash

#一個裔單例子

who

pwd

date

2.添加執(zhí)行權(quán)限

kunQvm:*/Learn$sudochmod+xch2-1.sh

[sudo]passwordforkun:

3.運營結(jié)果

kun@vm:*/Learn$./ch2-1.sh

kuntty72016-12-3010:25(:6)

/home/kun/Learn

2016年12月300星期五10:47:48CST

kun@vm:~/Learn$|

三、計算器:變量讀入和輸出

1.編輯程序

kun@vn:~/Learn$vimch2-2.sh

kun@vm:~/Learn$catch2-2.sh

ttl/btn/sh

readxy

z='expr$x+$y'

echo"Thesumis$z"

2.添加可執(zhí)行權(quán)限

k:~/Leai~n$chmod+xch2-2.sh

3.運營程序

kun@vm:~/Learn$./ch2-2.sh

15

TheG

四、比較兩個數(shù)字是否相等

1.編寫程序

kun@vm:~/Learn$catch2-3.sh

#!/btn/bash

readxy

if[$x-eq$y];then

echo"$x==$y"

else

echo"$x!=$y"

ft

2.添加可執(zhí)行權(quán)限

kun@vn:~/Learn$chmod+xch2-3.sh

3.運營程序

kun@vm:*/Learn$./ch2-3.sh

15

1!=5

kun@vm:*/Learn$./ch2-3.sh

66

6==6

~/Lea「n$■

五、循環(huán)計算累加和

1.編寫程序

kun^3vn:~/Learn$catch2-4.sh

#!/bin/bash

total=0

for((j=l;j<=100;j++))

do

total.='expr$total+$j';

done

echo"Theresultis$total"

2.添加可執(zhí)行權(quán)限

kun@vn:~/Learn$chnod+xch2-4.sh

3.運營程序

kun@vm:~/Learn$./ch2-4.sh

Theresultis5050

六、運用she11函數(shù)計算兩數(shù)之和

1.編寫程序

kun@vm:~/Learn$vimch2-5.sh

kun@vm:-/Learn$catch2-5.sh

#!/bin/bash

sum(){

echo$(($1+$2));

)

sum$1$2

2.添加可執(zhí)行權(quán)限

|kun@vm:~/Learn$chmod+xch2-5.sh

3.運營程序

:~/Learn$./ch2-5.sh100200

300

kun@vm:~/Learn$|

七、計算數(shù)組累乘

1.編寫程序

kun@vn:~/Learn$catch2-6.sh

#!/bin/bash

result=l

forttn"$e";

do

result=$(($resul.t*$i))

done

echo$result

2.添加可執(zhí)行權(quán)限

kun@vn:~/Learn$chmod+xch2-6.sh

3.運營程序

kun@vm:-*/Learn$./ch2-6.sh256

60

kun@vm:*/Learn$./ch2-6.sh2

2

kun@vm:*/Learn$./ch2-6.sh10000

10000

kun@vn:*/Learn$./ch2-6.sh1248IO12

7680

kun@vm:*/Learn$./ch2-6.sh-56-32

180

kunQvm:**/Learn$./ch2-6.sh-56

-30

kun@vm:*/Learn$

八、實驗總結(jié)

通過本次實驗,我學(xué)會了shell中的各種寫法,涉及流程控制,循環(huán),數(shù)組,函數(shù)等

等,了解到shell在Linux是一種強(qiáng)大的神器,可以批量完畢各種操作。

6實驗報告

組別姓名張正銀同組實驗者

第13周周四

實驗項目名稱實驗三文獻(xiàn)操作實驗日期

9,10節(jié)

教師評語

實驗成績指導(dǎo)教師

一、實驗?zāi)康?/p>

1.熟悉cd、date、pwd、cal、who>echo、c1ear>passwd等常用命令。

2.掌握在用戶主目錄下對文獻(xiàn)進(jìn)行的操作:復(fù)制一個文獻(xiàn)、顯示文獻(xiàn)內(nèi)容、查找

指定內(nèi)容、排序、文獻(xiàn)比較、文獻(xiàn)刪除等。

3.學(xué)會對目錄進(jìn)行管理:創(chuàng)建和刪除子目錄、改變和顯示工作目錄、列出和更

改文獻(xiàn)權(quán)限、鏈接文獻(xiàn)等。

二、文獻(xiàn)操作:修改文獻(xiàn)權(quán)限

設(shè)計一個程序,規(guī)定把系統(tǒng)中“/etc”目錄下的passwd文獻(xiàn)權(quán)限,設(shè)立成文獻(xiàn)所

有者可讀可寫,所有其他用戶為只讀權(quán)限。

1.編寫C語言程序

kun@vm:~/Learn$cat5-2.c

^include<sys/types.h>/*文件預(yù)處理,包含chmod函數(shù)庫*/

#include<sys/stat.h>/*文件預(yù)處理,包含chmod函數(shù)庫*/

intmain()/*C程序的主函數(shù),開始入口*/

(

chmod("/etc/passwdM,S_IRUSRIS_IWUSR|S_IRGRPIS_IROTH);

/*S_IRUSR表示擁有者具看讀權(quán)限,S」RGRP表示組而人具有讀權(quán)限,SJROTH表示其他人具有讀權(quán)限*/

return0;

}

2.編譯執(zhí)行

kun@vm:~/Learn$gcc-o5-2.05-2.c

kun@vm:~/Learn$./5-2.O

3.查看結(jié)果

kun@vm:~/Learn$Is-1/etc/passwd

-rw-r--r--1rootroot228412月3120:33/etc/passwd

三、從終端讀寫數(shù)據(jù)

文獻(xiàn)的打開可以用open函數(shù),即使本來的文獻(xiàn)不存在,也可以用open函數(shù)創(chuàng)建

文獻(xiàn)。在打開或者創(chuàng)建文獻(xiàn)時,可以指定文獻(xiàn)的屬性及用戶的權(quán)限等參數(shù)。

關(guān)閉一個打開的文獻(xiàn),用close函數(shù)。當(dāng)一個進(jìn)程終止時,它所有已打開的文獻(xiàn)都

由內(nèi)核自動關(guān)閉。

1.編寫C語言程序

5-7.CX

#include<unistd.h>

#include<stdlib.h>

intmain(void)

<

charbuf[80];

intn;

n=read(STDIN_FILENOzbuf,80);

if(n<0){

perror("readSTDIN_FILENO");

exit(1);

}

write(STDOUT_FILENO,buf,n);

return0;

}

2.查看運營結(jié)果

Terminal

abcdeffffffff

abcdeffffffff

Processreturned0(0x0)executiontime

PressENTERtocontinue.

四、文獻(xiàn)上鎖和鎖的釋放

1.題目規(guī)定

設(shè)計一個程序,規(guī)定在“/root”下打開一個名為“5-llfiIe”的文獻(xiàn),假

如該文獻(xiàn)不存在,則創(chuàng)建此文獻(xiàn)。打開后對其加上強(qiáng)制性的寫入鎖F_WRLCK,按回

車后解鎖F_UNLCK,然后加上讀出鎖F_RDLCK,按回車后再解鎖F_UNLCK。程序在

終端1運營后會顯示程序的進(jìn)程號,再打開終端2,會提醒此文獻(xiàn)處在鎖定狀態(tài),此

時在終端2可以多按回車,觀測程序的運營結(jié)果。然后在終端1按回車,等待終端

1解鎖后,在終端2才可鎖定此文獻(xiàn),你可觀測到強(qiáng)制性鎖是獨占狀態(tài),當(dāng)在終端2

解鎖后,在終端1或2可加讀出鎖,在讀出鎖狀態(tài)終端1或2的運營不需要等待,由

于讀出鎖是處在共享狀態(tài),請編寫程序并測試程序運營的結(jié)果。

2.分析

主程序先用open函數(shù)打開文獻(xiàn)“5-1Ifile”,假如該文獻(xiàn)不存在,則創(chuàng)建此文

獻(xiàn);接著調(diào)用自定義函數(shù)Iock_set:先傳遞參數(shù)“F_WRLCK”給文獻(xiàn)“5-1IfiIe”

加鎖,并打印輸出給文獻(xiàn)加鎖進(jìn)程的進(jìn)程號,然后先傳遞參數(shù)“F_UNLCK”給文獻(xiàn)

“5-1lfile”解鎖,并打印輸出給文獻(xiàn)解鎖進(jìn)程的進(jìn)程號;在自定義函數(shù)lock_set

給文獻(xiàn)上鎖語句前,加上判斷文獻(xiàn)是否上鎖的語句,假如文獻(xiàn)已經(jīng)被上鎖,打印輸出給

文獻(xiàn)上鎖進(jìn)程的進(jìn)程號。

3.編寫C語言程序

5-7.CX

#include<stdio?h>

#include<stdlib.h>

#include<unistd-h>

#include<sys/file.h>

#include<sys/types.h>

tinclude<sys/stat.h>

voidlockset(intfd,inttype)

structflocklock;

lock.1whence=SEEK_SET;

lock.1start

lock?1len=0

while(1)

lock.l__type=type;

if((fcntl(fd,F_SETLK,&lock))==0)/*握一同的tvne值給文件力口鎖或???*/

(

if(lock.l_type==F_RDLCK)/*FRDLCK為共享鎖,表示讀取錨或建議件錨

Printf("加上讀取鎖的犀'%d\n",9etPid())'

elseif(lock.l_type-FJWLCK)/*FWRLCK為排斥鎖,表示強(qiáng)制忤鐳*/

etid

printf("加上寫入鎖的星4%d\n-,9P())'

elseif(lock.l__type==F_UNLCK)

printf(,,釋放強(qiáng)制性鎖:%d\n-,getpid());

return;

}

fcntKfd,F_GETLK,&lock);*磋取文件鉞的狀態(tài)★/

if(lock.l_type1=F_UNLCK)

{

if(lock.l_type==F_RDLCK)

print*”文件日經(jīng)加上了讀取鎖,茸講程號星%dXn..,lock.l_pid);

elseif(lock.l_type==F_WRLCK)

printf(“文用力口圭耳入鎖.其說程號是&%dXn..,lock.l_pid);

getchar();

)

intmain()

(

intfd;

M

fd=open("/root/5-llfile,O_RDWR|O_CREAT,0666);

if(fd<0)

perror(“打開出錯”);

exit(1);

)

lock_set(fdzF_WRLCK);

getchar();

lock_set(fdzF_UNLCK);

getchar();

lock_set(fdzF_RDLCK);

getchar();

lock_set(fd,F_UNLCK);

close(fd);

exit(0);

4.執(zhí)行程序

終端1:

加上寫入鎖的是:5403

釋放強(qiáng)制性鎖:5403

文獻(xiàn)已加上寫入鎖,其進(jìn)程號是:5404

文獻(xiàn)已加上寫入鎖,其進(jìn)程號是:5404

文獻(xiàn)已加上寫入鎖,其進(jìn)程號是:5404

加上讀取鎖的是:5403

釋放強(qiáng)制性鎖:5403

終端2:

文獻(xiàn)已加上寫入鎖,其進(jìn)程號是:5403

文獻(xiàn)已加上寫入鎖,其進(jìn)程號是:5403

文獻(xiàn)已加上寫入鎖,其進(jìn)程號是:5403

加上寫入鎖的是:5404

釋放強(qiáng)制性鎖:5404

加上讀取鎖的是:5404

釋放強(qiáng)制性鎖:5404

五、流文獻(xiàn)的打開和關(guān)閉

帶緩存的流文獻(xiàn)I/O操作,是基于輸入/輸出(I/O)流機(jī)制的文獻(xiàn)操作,又做

文獻(xiàn)流(Filestream)的操作。下面具體說明文獻(xiàn)流的關(guān)閉與打開。

1.題目規(guī)定

設(shè)計一個程序,規(guī)定用流文獻(xiàn)I/O操作打開文獻(xiàn)“5;2file”,假如該文獻(xiàn)不存

在,則創(chuàng)建此文獻(xiàn)。

2.題目分析

帶緩存的基于輸入/輸出(I/。)流機(jī)制的文獻(xiàn)操作時,打開文獻(xiàn)用fopen函數(shù),關(guān)

閉文獻(xiàn)用fclose函數(shù)。

3.程序編寫

|5-12.CX

#include<stdio?h>

intmain()

El{

FILE*fp;

if((fp=fopen("5-12file","a+"))==NULL)

3{

printf("打開(創(chuàng)建)文件出錯,,);

exit(0);

一}

fclose(fp);

)

J

4.運營結(jié)果

F

0^@Terminal

Processreturned0(0x0)executiontime:

PressENTERtocontinue.

1

kun@vn:"/Learn$Is-al5-12ftle

-rw-rw-r--1kunkun012月3121:155-12fUe

可以看到程序運營后創(chuàng)建了"5-12fiIe”文獻(xiàn)

六、實驗總結(jié)

通過本次實驗,我掌握了Linux下用C語言讀寫文獻(xiàn)的方法,涉及帶緩存和不

帶緩存的方法。此外也學(xué)會了用C語言修改文獻(xiàn)權(quán)限等知識點??梢钥闯鯨inux和C

語言是渾然一體地,可以用C語言無縫地操作Linux系統(tǒng)。

6實驗報告

組別姓名張正餛同組實驗者

第14周周

實驗項目名稱實驗四進(jìn)程控制實驗日期

四9,10節(jié)

教師評語

實驗成績指導(dǎo)教師

一、實驗?zāi)康?/p>

1.理解進(jìn)程的基本概念及進(jìn)程的結(jié)構(gòu)

2.學(xué)會Linux環(huán)境下進(jìn)程的相關(guān)函數(shù)的應(yīng)用

3.掌握守護(hù)進(jìn)程的概念、啟動和建立

4.掌握進(jìn)程操作程序的編寫

二、進(jìn)程簡介

進(jìn)程是正在執(zhí)行中的程序。當(dāng)我們在終端執(zhí)行命令時,Linux就會建立一個進(jìn)

程,而當(dāng)我們的程序執(zhí)行完畢時,這個進(jìn)程就被終止了。

Linux是一個多任務(wù)操作系統(tǒng),允許多個用戶使用計算機(jī)系統(tǒng),多個進(jìn)程并發(fā)執(zhí)

行。

Linux環(huán)境下啟動進(jìn)程有兩種重要途徑:手工啟動和調(diào)度啟動。

三、程序顯示進(jìn)程號和父進(jìn)程號

在Linux環(huán)境下進(jìn)程創(chuàng)建時,系統(tǒng)會分派一個唯一的數(shù)值給每個進(jìn)程,這個數(shù)值

就稱為進(jìn)程標(biāo)記符(PID)o

在Linux中進(jìn)程標(biāo)記有進(jìn)程號(PID)和它的父進(jìn)程號(RPID)o其中,PID唯一地

標(biāo)記一個進(jìn)程。PID和PPID都是非零的正整數(shù)。在Linux中獲得當(dāng)前進(jìn)程的PID

和PPID的系統(tǒng)調(diào)用為getpid和getppid函數(shù)。

1.程序編寫

#include<stdio.h>

tinclude<unistd.h>

intmain(){

printf("Bu4:%d\n",getpid());

printf("聞6:*d\n",getppid());

return0;

)

2.編譯運營

Terminal

td:3515

pid:3514

rocessreturned0(0x9)execution

ressENTERtocontinue.

Terminal

ptd:3542

ppid:3541

Processreturned0(0x0)exec

PressENTERtocontinue.

可看到,每次運營的Pid都是不同的。

四、子進(jìn)程的創(chuàng)建

進(jìn)程調(diào)用fork函數(shù)創(chuàng)建一個新進(jìn)程,由fork創(chuàng)建的新進(jìn)程被稱為子進(jìn)程(ch

該函數(shù)被調(diào)用一次,但返回兩次,兩次返回的區(qū)別是子進(jìn)程的返回值

ildprocess)o

是0,而父進(jìn)程的返回值則是新子進(jìn)程的進(jìn)程PID。

子進(jìn)程和父進(jìn)程繼續(xù)執(zhí)行fork之后的指令。子進(jìn)程是父進(jìn)程的復(fù)制品。例如,子

進(jìn)程獲得父進(jìn)程數(shù)據(jù)空間、堆和棧的復(fù)制品。注意,這是子進(jìn)程所擁有的拷貝。父、

子進(jìn)程并不共享這些存儲空間部分,通常父、子進(jìn)程共享代碼段

1.編寫C語言程序

tinclude<sys/types.h>

#include<unistd.h>

finclude<stdio.h>

finclude<stdlib.h>

intmain(){

pid_tpid;

char*message;

intn;

pid=fork();

if(pid<0){

perror(Mforkfailed\nw);

exit(1);

}

elseif(pid==0){

message="Thisisthechildln;

n=3;

)

else{

message="Thisistheparent";

n=6;

)

while(n--){

puts(message);

sleep(1);

}

)

2.運營程序

Terminal

Thisistheparent

Thisisthechild!

Thisistheparent

Thisisthechild!

Thisistheparent

Thisisthechild!

Thisistheparent

Thisistheparent

Thisistheparent

Processreturned0(0x0)executiontime:6.009

PressENTERtocontinue.

五、進(jìn)程的退出

1.題目規(guī)定

設(shè)計一個程序,規(guī)定子進(jìn)程和父進(jìn)程都在顯示輸出一些文字后分別用exit和_ex

it函數(shù)終止進(jìn)程。

2.題目分析

由于printf函數(shù)使用的是緩沖I/O方式,碰到“\n”時自動將數(shù)據(jù)從緩沖區(qū)

讀出??梢钥闯?,調(diào)用exit函數(shù)時,緩沖區(qū)中的記錄能正常輸出;而調(diào)用_exit時,

緩沖區(qū)中的記錄無法輸出。

Linux標(biāo)準(zhǔn)函數(shù)庫中,有一種操作稱為“緩沖1/0”,每次讀寫文獻(xiàn)時,都是

在緩沖區(qū)里讀取、寫入。寫入文獻(xiàn)時,等滿足一定條件才將緩沖區(qū)的內(nèi)容一次性寫

入文獻(xiàn)。但是,有時沒有滿足選定的條件,數(shù)據(jù)只存在緩沖區(qū)內(nèi),假如這時調(diào)用一exit

函數(shù)直接關(guān)閉進(jìn)程,緩沖區(qū)中的數(shù)據(jù)就會丟失。

3.程序編寫

g.cX

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include<sys/types.h>

intmain(){

pid__tresult;

result=fork();

intnewret;

if(result==-1){

perror("Forkerror!");

exit(0);

}

elseif(result==0){

printf("childJjjg]娛劭

_exit(0);

}else(

printf("parent;

exit(0);

return0;

4.程序執(zhí)行

Terminal

parentheheeh

Processreturned0(0x0)executiontime:0.002s

PressENTERtocontinue.

可以看到,程序只在父進(jìn)程進(jìn)行了輸出。這是由于子進(jìn)程調(diào)用了_exit()函數(shù),

沒有進(jìn)行緩沖區(qū)I。的刷新。

六、實驗總結(jié)

通過本次實驗,我了解了Linux的進(jìn)程機(jī)制,學(xué)會了基本的進(jìn)程創(chuàng)建,進(jìn)程終止,學(xué)

會了在Linux下用C語言操作進(jìn)程。了解到了Linux是一個多任務(wù)操作系統(tǒng),允許我

們使用計算機(jī)系統(tǒng),多個進(jìn)程并發(fā)執(zhí)行。

實驗報告

組別姓名張正銀同組實驗者

第15周周四

實驗項目名稱實驗五線程練習(xí)實驗日期

9,10節(jié)

教師評語

實驗成績指導(dǎo)教師

一、實驗?zāi)康?/p>

>了解線程的基本概念

>掌握線程相關(guān)函數(shù)及應(yīng)用

>理解線程同步互斥

二、線程概述

線程定義為進(jìn)程內(nèi)一個執(zhí)行單元或一個可調(diào)度實體。在不擁有線程的進(jìn)程概念

中,進(jìn)程既是一個擁有資源的獨立單位,它可獨立分派虛地址空間、主存和其它,又

是一個可獨立調(diào)度和分派的基本單位。在有了線程以后,資源擁有單位稱為進(jìn)程(或

任務(wù)),調(diào)度的單位稱為線程、又稱輕進(jìn)程

(LightWeightProcess,LWP)o

多線程的進(jìn)程在同一地址空間內(nèi)涉及多個不同的控制流,也即屬于同一進(jìn)程下

的線程,它們共享進(jìn)程擁有的資源,如代碼、數(shù)據(jù)、文獻(xiàn)等。線程也獨占一些資源,

如堆棧、程序計數(shù)器等。

多線程系統(tǒng)的優(yōu)點涉及對用戶響應(yīng)的改善,進(jìn)程內(nèi)的資源共享,以及運用多解

決器體系結(jié)構(gòu)的便利。從實現(xiàn)的角度看,把線程分為用戶級線程和內(nèi)核級線程。j用戶

級線程對程序員來說是可見的,而對內(nèi)核來說是未知的,用戶空間的線程庫通常用以

管理用戶級線程,線程庫提供對線程創(chuàng)建、調(diào)度和管理的支持。

內(nèi)核級線程由操作系統(tǒng)支持和管理,在內(nèi)核空間實現(xiàn)線程創(chuàng)建、調(diào)度和管理。

用戶級線程與內(nèi)核級線程相比,優(yōu)點是創(chuàng)建和管理要更快;缺陷是得到CPU的時

間更少,當(dāng)一個線程阻塞時,連累其它線程所有阻塞。

三、共享內(nèi)存變量訪問中沖突的現(xiàn)象

1.關(guān)于線程同步與互斥

當(dāng)并發(fā)執(zhí)行的線程共享數(shù)據(jù)時,各線程會改寫共享的數(shù)據(jù),由于CPU調(diào)度順序的

不擬定性,導(dǎo)致線程運營結(jié)果的不擬定性。所以,必須為共享數(shù)據(jù)的一組互相協(xié)作的線

程提供互斥。一種思想是保證在任何時刻最多只能有一個線程執(zhí)行這些訪問共享數(shù)

據(jù)的代碼。這就是臨界區(qū)互斥問題。

線程在并發(fā)執(zhí)行時為了保證結(jié)果的可再現(xiàn)性,各線程執(zhí)行序列必須加以限制以保

證互斥地使用臨界資源,互相合作完畢任務(wù)。多個相關(guān)線程在執(zhí)行順序上的協(xié)調(diào)稱為

線程同步。用于保證多個線程在執(zhí)行順序上的協(xié)調(diào)關(guān)系的相應(yīng)機(jī)制稱為線程同步機(jī)

制。

Pthread線程庫提供了多種方式來解決線程同步互斥機(jī)制,最常用的是互斥

鎖、條件變量和信號量。

2.C語言程序編寫

tinclude<stdio.h>

?include<stdlib.h>

#include<pthread.h>

#definenLOOP10

intcounter=0;/*共享戀晶*/

void*pthread(void*vptr)

{

inti,val;

for<i=0;i<nLOOP;i++)

{

val=counter;

sleep(vptr);

printf(n%x:%d\n",(unsignedint)pthreadself(),counter);

counter=val+l;

)

returnNULL;

)

intmain<intargc,char**argv)

(

pthread_ttidl,tidl;

pthread_create(&tidl,NULL,pthread,(void*)1);

pthread_create(&tid21NULL,pthread,(void*)2);

pthread_join(tidl,NULL);

pthread_join(tid2,NULL);

return0;

)

3.程序執(zhí)行

[root@Icxzalhostroot]然./8-3

b7f5fba0:0

b755eba0:1

b7f5fba0:1

b7f5fbftO:2

b755eba0:3

b7f5fba0;2

b7f5fba0;4

b755eba0,5

b7f5fba0,3

b7f5fba0:6

b755eba0:7

b7f5fbaO:4

b7f5fba0;8

b755eba0:9

b7f5fba0:5

b755eb*nr

b755eba0;6

b755eba0;7

b755ebaO;6

b755eba0;9

counter*10

編譯并運營程序:結(jié)果是10。我們創(chuàng)建兩個線程,counter的初值為0,各自把

counter增長10次,正常情況下最后counter應(yīng)當(dāng)?shù)扔?0,四、實驗總結(jié)

通過本次實驗,我學(xué)會了在Linux下使用C語言操作線程的方法,了解了線程

和進(jìn)程的區(qū)別,對于理解Linux的核心非常有幫助。

實驗報告

組別姓名張正銀同組實驗者

第16周周四

實驗項目名稱實驗六網(wǎng)絡(luò)編程實驗日期

9,10節(jié)

教師評語

實驗成績指導(dǎo)教師

一、實驗?zāi)康?/p>

>理解端口及Socket的基本概念

>掌握面向連接的TCP編程

>掌握面向非連接的UDP編程

>了解I/O多路運用的控制

>了解復(fù)雜網(wǎng)絡(luò)程序的實現(xiàn)

二、協(xié)議概述

1.TCP/IP協(xié)議

TCP/IP協(xié)議(TransmissionContro1Protocol/InternetProtoco1)

叫做傳輸控制/網(wǎng)際協(xié)議,又叫網(wǎng)絡(luò)通信協(xié)議。

TCP/IP是20世紀(jì)7()年代中期美國國防部為其ARPANET廣域網(wǎng)開發(fā)的網(wǎng)絡(luò)體

系結(jié)構(gòu)和協(xié)議標(biāo)準(zhǔn),以它為基礎(chǔ)組建的Internet是目前國際上規(guī)模最大的計算機(jī)網(wǎng)

絡(luò)。正由于Internet的廣泛使用,使得TCP/IP成了事實上的標(biāo)準(zhǔn)。

TCP/IP雖然叫傳輸控制協(xié)議(TCP)和網(wǎng)際協(xié)議(IP),但事實上是一組協(xié)議,它包含

了上百個功能的協(xié)議,如ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等,這

些協(xié)議一起被稱為TCP/IP協(xié)議。

2.UDP和TCP協(xié)議

TCP與UDP是兩種不同的網(wǎng)絡(luò)傳輸方式。兩個不同計算機(jī)中的程序,使用IP地

址和端口,要使用一種約定的方法進(jìn)行數(shù)據(jù)傳輸。重要的區(qū)別是進(jìn)行數(shù)據(jù)傳輸時是

否進(jìn)行連接。

TCP:TCP是一種面向連接的網(wǎng)絡(luò)傳輸方式。這種方式可以理解為打電話。計算

機(jī)A先呼喊計算機(jī)B,計算機(jī)B接受連接后發(fā)出確認(rèn)信息,計算機(jī)A收到確認(rèn)信息以后

發(fā)送信息,計算機(jī)B完畢數(shù)據(jù)接受以后發(fā)送完畢信息,這時再關(guān)閉數(shù)據(jù)連接。所以TCP

是面向連接的可靠的信息傳輸方式。這種方式是可靠的,缺陷是傳輸過程復(fù)雜,需要

占用較多的網(wǎng)絡(luò)資源。

UDP:UDP是一種不面向連接的傳輸方式。可以簡章理解成郵寄信

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論