版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Unix/Linux操作系統(tǒng)實(shí) 驗(yàn) 報(bào) 告 實(shí)驗(yàn)項(xiàng)目: 實(shí)驗(yàn)五 、 Linux C 語言編程 實(shí)驗(yàn)時(shí)間: 第十一周周三上午一二節(jié) 地點(diǎn) 學(xué)生姓名: 學(xué)號(hào) 實(shí)驗(yàn)?zāi)康?理解系統(tǒng)調(diào)用和庫函數(shù)的異同。2掌握用系統(tǒng)調(diào)用和庫函數(shù)進(jìn)行編程。3掌握一些常用的系統(tǒng)調(diào)用和庫函數(shù)的功能及應(yīng)用。實(shí)驗(yàn)環(huán)境在Windows 8.1 Pro, 64-bit (Build 9600) 6.3.9600的真機(jī)上(實(shí)驗(yàn)一的基礎(chǔ)上)安裝了VMware Workstation 11.0.0 build-2305329 ,在VMware中安裝了32位的Linux操作系統(tǒng)(Linux MVM 3.2.0-23-generic-pae #
2、36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux),vim 的版本是version 7.3.429,使用的用戶是root賬戶。實(shí)驗(yàn)內(nèi)容及步驟第一部分:使用系統(tǒng)調(diào)用對(duì)文件進(jìn)行操作利用open函數(shù)創(chuàng)建文件在 ./tmp 目錄下調(diào)用 open( )函數(shù),以可讀可寫的方式創(chuàng)建 hello.c 文件。open 函數(shù)帶有 3 個(gè) flag 參數(shù):O_CREATE、O_TRUNC、O_WRONLY,文件權(quán)限設(shè)置為 0600。代碼如下:#include#include#include#includeint main()int
3、 fd = 0 ;char file100 = hello.c ;fd = open(file,O_CREAT|O_TRUNC|O_WRONLY,S_IRUSR|S_IWUSR) ;if( fd = 0 )printf(Open file failed!nn) ;return 0 ;return 0 ;利用open()創(chuàng)建文件并寫入數(shù)據(jù)打開 open 數(shù)建文,然對(duì)文進(jìn)讀操作,入Hel!I am wrting to ths ile!,文件針于件部接著使用 lsek數(shù)文件針動(dòng)件始,并出 10個(gè)字節(jié)將打出。代碼如下:#include#include#include#include#include#i
4、ncludeint main()int fd = 0 ;int WritedSize = 0 ;int ReadedSize = 0 ;int ReadSize = 10 ;char buffer100 = ;char file100 = hello.c ;char str100 = Hello!I am writing to this file! ;/fd = open(file,O_CREAT|O_TRUNC|O_WRONLY,S_IRUSR|S_IWUSR) ;fd = open( file, O_RDWR | O_TRUNC, S_IRUSR|S_IWUSR ) ;if( fd = 0
5、 )printf(Open file failed!nn) ;return 0 ;WritedSize = write(fd,str,strlen(str) ;if( WritedSize = 0 )printf(Write file failed!nn) ;close(fd) ;return 0 ;if( -1 = lseek(fd,0,SEEK_SET )printf(seek file failed!nn) ;ReadedSize = read(fd,buffer,ReadSize) ;if(ReadedSize = 10 )printf(Readed from %s : %snn,fi
6、le,buffer) ;elseprintf(Readed from %s failed : readed size = %dnn,file,ReadedSize) ;close(fd) ;return 0 ;利用系統(tǒng)調(diào)用實(shí)現(xiàn)copy功能編寫一個(gè)程序, 把一個(gè)文件的內(nèi)容復(fù)制到另外一個(gè)文件上,即實(shí)現(xiàn)簡(jiǎn)單的copy功能。要求:只用open(), read(),write()和close()系統(tǒng)調(diào)用,程序的第一個(gè)參數(shù)是源文件,第二個(gè)參數(shù)是目的文件。#include#include#include#include#include#includeint main(int argc , char* arg
7、v)int i = 0 ;int fdRead = 0 ;int fdWrite = 0 ;int WritedSize = 0 ;int ReadedSize = 0 ;int ReadSize = 10 ;long TatolCopied = 0 ;char buffer100 = ;/char myarg1100 = hello.c ;/char myarg2100 = newhello.c ;if( argc != 3 )printf(Input parameter error: argc = %dn,argc) ;printf(Filename SourceFile Destinat
8、ionFilen) ;return 0 ;/*for( i = 0 ; i argc ; i+ )printf(argv%d = %sn,i,argvi);*/fdRead= open( argv1, O_RDONLY ) ;/fdRead= open( myarg1, O_RDONLY ) ;if( fdRead = 0 )printf(Open source file failed!nn) ;return 0 ;fdWrite = open( argv2, O_RDWR | O_CREAT ) ;/fdWrite = open( myarg2, O_RDWR | O_CREAT) ;if(
9、 fdWrite 0 )if( ReadSize = 0 )printf(read file failed!nn) ;close(fdRead) ;close(fdWrite) ;return 0 ;WritedSize = write(fdWrite,buffer,ReadedSize) ;if( WritedSize = 0 )printf(write file failed!nn) ; close(fdRead) ; close(fdWrite) ; return 0 ;TatolCopied += WritedSize ;printf(Copy file %s to %s succes
10、s!nn,argv1,argv2) ;/printf(Copy file %s to %s success!nn,myarg1,myarg2) ;printf(Copied size = %ldnn,TatolCopied );close(fdRead) ;close(fdWrite) ;return 0 ;第二部分:使用系統(tǒng)調(diào)用對(duì)進(jìn)程進(jìn)行控制可以用一些Linux命令操作和管理進(jìn)程。1用ps命令觀察Linux正在運(yùn)行的進(jìn)程(1)ps命令:用于觀察正在運(yùn)行的進(jìn)程的情況。ps命令包括較豐富的可選參數(shù),常見的可選參數(shù)包括如下幾個(gè)。-A:顯示所有用戶啟動(dòng)的進(jìn)程。-a:顯示所有其他用戶的進(jìn)程。-u:顯示
11、進(jìn)程擁有者、進(jìn)程啟動(dòng)時(shí)間等更詳細(xì)的信息。-x:顯示不是由終端提供的進(jìn)程信息。-r:只顯示正在運(yùn)行的進(jìn)程。-m:顯示線程信息。-w:寬行顯示進(jìn)程信息。-l:用長格式顯示進(jìn)程信息。-t:只顯示由終端/dev/tty提交的進(jìn)程。(2)執(zhí)行ps命令操作:ps命令可以顯示本機(jī)正在運(yùn)行的所有進(jìn)程(包括其他用戶和系統(tǒng)運(yùn)行的進(jìn)程)的詳細(xì)列表。命令格式:ps aux根據(jù)命令的執(zhí)行結(jié)果,分析各進(jìn)程的運(yùn)行情況。進(jìn)程創(chuàng)建1) 編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子進(jìn)程。當(dāng)此程序運(yùn)行時(shí),在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每一個(gè)進(jìn)程在屏幕上顯示一個(gè)字符:父進(jìn)程顯示“father“;子進(jìn)程分別顯示字符串”c
12、hild One“和 字符串“child Two”。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。執(zhí)行之后的結(jié)果如下:兩個(gè)輸出結(jié)果不一樣,是因?yàn)樗麄儐?dòng)的順序是沒有先后的,都是平等的。代碼如下:#include#includeint main(int argc, char *argv)int pid = 0 ;pid = fork() ;/ Creat process failedif( -1 = pid )printf(Creat first process failed!nn);return 0 ;/ in parents process pid = child one pidif( pid !
13、= 0 )pid = fork() ;if( -1 = pid )printf(Creat second process failed!nn);return 0 ;/ in parents process pid = child two pidif( pid != 0 )printf(fathernn);/ in child two process pid = 0elseprintf(child twonn);/ in child one process pid = 0else printf(child onenn);return 0 ;利用for()創(chuàng)建子進(jìn)程編寫個(gè)序用 fo創(chuàng)一子程打一文父
14、程都文 件中入息用 wr)表是進(jìn);每進(jìn)都印個(gè)程的 ID 號(hào)。 最后進(jìn)行 wat代碼如下:#include#include#include#include#include#includeint main(int argc, char *argv)int pid = 0 ;int fd = 0 ;char str100 = who are you?rn ;char filename100 = test ;char strParent = I am your parent.rnrn ;char strChild = I am child.rnrn ;/ open filefd = open(file
15、name,O_CREAT|O_RDWR) ;if( fd = -1 )printf(Open file failed!nn);return 0 ;/ create processpid = fork() ;/ Creat process failedif( -1 = pid )printf(Creat first process failed!nn);close(fd) ;return 0 ;/ in parents process pid = childs pidif( pid != 0 )printf(Parents pid = %dnn,getpid();write(fd,str,str
16、len(str) ;write(fd,strParent,strlen(strParent); ;wait() ;/ in childs process pid = 0else printf(childs pid = %dnn,getpid();write(fd,str,strlen(str) ;write(fd,strChild,strlen(strChild);if( fd != -1 )close(fd) ;fd = -1 ;return 0 ;第三部分:進(jìn)程通信編程進(jìn)程的管道通信 編寫程序?qū)崿F(xiàn)進(jìn)程的管道通信。使用系統(tǒng)調(diào)用pipe()建立一個(gè)管道,二個(gè)子進(jìn)程P1和P2分別向管道各寫一句話
17、: Child 1 is sending a message! Child 2 is sending a message!父進(jìn)程從管道中讀出二個(gè)來自子進(jìn)程的信息并顯示(要求先接收P1,再接收P2)。代碼如下:#include#include#includeint main(int argc, char *argv)int pid = 0 ;int pipefd2 ;int flag = 0 ;int Size = 100 ;char strChild1 = Child 1 is sending a message! ;char strChild2 = Child 2 is sending a
18、message! ;char buffer100 = ;/pipefd0 read end of the pipe. /pipefd1 write end of the pipe./ Greate pipeflag = pipe(pipefd) ;if( flag = -1 )printf(Create pipe failed!nn);return 0 ;/ Create processpid = fork() ;/ Creat process failedif( -1 = pid )printf(Creat first process failed!nn);return 0 ;/ in pa
19、rents process pid = child one pidif( pid != 0 )pid = fork() ;if( -1 = pid )printf(Creat second process failed!nn);return 0 ;/ in parents process pid = child two pidif( pid != 0 )read(pipefd0,buffer,Size) ;printf(Read child1 : %snn,buffer);memset(buffer,0,Size);read(pipefd0,buffer,Size) ;printf(Read
20、child2 : %snn,buffer);close(pipefd0) ;close(pipefd1) ;/printf(fathernn);/ in child two process pid = 0elsewrite(pipefd1,strChild2,strlen(strChild2) ;/printf(child twonn);/ in child one process pid = 0else sleep(1) ;write(pipefd1,strChild1,strlen(strChild1) ;/printf(child onenn);return 0 ;進(jìn)程間使用信號(hào)通信編寫
21、個(gè)他建個(gè)子進(jìn)程子程發(fā)一信后待子終止;進(jìn)接信,出自的態(tài)息最終止己。程序運(yùn)行效果如下:程序的代碼如下:#include#include#include#includeint status = 0 ;void myfun() ;void mywait() ;int main(int argc, char *argv)int pid = 0 ;int flag = 0 ;/ Create processpid = fork() ;/ Creat process failedif( -1 = pid )printf(Creat process failed!nn);return 0 ;/ in pare
22、nts process pid = child pidif( pid != 0 )/ this step is very importantsleep(1) ; / Send message to child processkill(pid,17) ;/ waitting for child process exitwait(0) ;printf(Parent process is exitting.nn);/ in child process pid = 0else printf(Entey child process. nn);/ take over original functionsi
23、gnal(17,(void*)myfun) ;/ waitting for signalmywait() ;/sleep(1) ;printf(Child process is exitting.nn);return 0 ;void myfun()printf(myfun was involed! nn);status = 1 ;void mywait()printf(Enter mywait.nn);while( status = 0 );printf(Exit mywait.nn);閱讀下列程序,分析程序功能。#include #include #include #include #inc
24、lude int main(int argc, char *argv)int pipefd2;pid_t cpid;char buf;if (argc != 2) fprintf(stderr, Usage: %s n, argv0);exit(EXIT_FAILURE);if (pipe(pipefd) = -1) perror(pipe);exit(EXIT_FAILURE);cpid = fork();if (cpid = -1) perror(fork);exit(EXIT_FAILURE);if (cpid = 0) /* Child reads from pipe */close(
25、pipefd1);/* Close unused write end */while (read(pipefd0, &buf, 1) 0)write(STDOUT_FILENO, &buf, 1);write(STDOUT_FILENO, n, 1);close(pipefd0);_exit(EXIT_SUCCESS); else /* Parent writes argv1 to pipe */close(pipefd0);/* Close unused read end */write(pipefd1, argv1, strlen(argv1);close(pipefd1);/* Read
26、er will see EOF */wait(NULL);/* Wait for child */exit(EXIT_SUCCESS);以上程序運(yùn)行的效果如下:程序所完成的功能是把用戶輸入的參數(shù)輸出出來。綜合訓(xùn)練題:編寫一個(gè)程序, 把一個(gè)文件的內(nèi)容復(fù)制到另外一個(gè)文件上,即實(shí)現(xiàn)簡(jiǎn)單的copy功能。要求使用多線程(進(jìn)程)技術(shù)和管道技術(shù)。(選做)#include#include#include#include#include#includeint main(int argc, char *argv)int pid = 0 ;int flag = 0 ;int pipefd2 = -1,-1 ;int
27、 fdRead = -1 ;int fdWrite = -1 ;int WritedSize = 0 ;int ReadedSize = 0 ;int ReadSize = 100 ;char buffer100+4 = ;/ pipefd0 read end of the pipe. / pipefd1 write end of the pipe./ Greate pipeif( argc != 3 )printf(Input parameter error: argc = %dn,argc) ;printf(Usage : Filename SourceFile DestinationFilen) ;return 0 ;flag = pipe(pipefd) ;if( flag = -1 )printf(Create pipe failed!nn);return 0 ;fdRead= open( argv1, O_RDONLY ) ;if( fdRead = 0 )printf(Open source file failed!nn) ;goto FatalError ;fdWrite = open( argv2, O_RDWR | O_CREAT , 0666 ) ;if( fdWrite 0 )if( ReadedSize 0 )i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中秋節(jié)聯(lián)歡會(huì)致辭范文(10篇)
- 九月大班上學(xué)期月計(jì)劃范文(5篇)
- 中秋晚會(huì)董事長致辭范文(13篇)
- 曹植課件教學(xué)課件
- 講師比賽課件教學(xué)課件
- 影響高中數(shù)學(xué)成績的原因及解決方法
- 消費(fèi)品和有關(guān)服務(wù)的比較試驗(yàn) 實(shí)施要求 編制說明
- 愛嬰醫(yī)院課件教學(xué)課件
- 南宮市八年級(jí)上學(xué)期語文10月月考試卷
- 八年級(jí)上學(xué)期語文期中考試卷
- 2024年廣西玉柴機(jī)器集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 人類社會(huì)面臨的物種滅絕與生物多樣性保護(hù)
- 工程檢測(cè)檢驗(yàn)
- 旅行社服務(wù)采購
- 班組消防管理制度
- 消化科護(hù)士的危重病人護(hù)理技術(shù)
- 《撰寫研究報(bào)告》課件
- 視頻剪輯課件
- 大米食品安全培訓(xùn)
- 膀胱腫瘤電切術(shù)護(hù)理查房
- 宮角妊娠教學(xué)查房課件
評(píng)論
0/150
提交評(píng)論