版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度某旅游度假區(qū)水電暖系統(tǒng)設(shè)計與安裝合同2篇
- 2025版五星級酒店客房服務(wù)員勞動合同9篇
- 2025版企業(yè)食堂管理承包合同模板3篇
- 二零二五版多場景物聯(lián)網(wǎng)技術(shù)應(yīng)用合同3篇
- 醫(yī)院醫(yī)療設(shè)備管理與發(fā)展規(guī)劃知識考核試卷
- 土地利用規(guī)劃中的城鄉(xiāng)水源地保護(hù)考核試卷
- 2025年合資協(xié)議書參考樣本
- 2025年勞動仲裁裁決和解協(xié)議
- 2025年加盟商業(yè)合同
- 2025年大數(shù)據(jù)智能分析合作協(xié)議
- 物業(yè)民法典知識培訓(xùn)課件
- 2023年初中畢業(yè)生信息技術(shù)中考知識點詳解
- 2024-2025學(xué)年八年級數(shù)學(xué)人教版上冊寒假作業(yè)(綜合復(fù)習(xí)能力提升篇)(含答案)
- 《萬方數(shù)據(jù)資源介紹》課件
- 醫(yī)生定期考核簡易程序述職報告范文(10篇)
- 第一章-地震工程學(xué)概論
- 《中國糖尿病防治指南(2024版)》更新要點解讀
- 交通運輸類專業(yè)生涯發(fā)展展示
- 租賃汽車可行性報告
- 計算機(jī)輔助設(shè)計AutoCAD繪圖-課程教案
- 老年護(hù)理學(xué)-老年人與人口老齡化-課件
評論
0/150
提交評論