![操作系統(tǒng)實(shí)驗(yàn)(實(shí)驗(yàn)二三四)_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/17/9fc2d468-5d79-4285-b7de-6ea43861ea91/9fc2d468-5d79-4285-b7de-6ea43861ea911.gif)
![操作系統(tǒng)實(shí)驗(yàn)(實(shí)驗(yàn)二三四)_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/17/9fc2d468-5d79-4285-b7de-6ea43861ea91/9fc2d468-5d79-4285-b7de-6ea43861ea912.gif)
![操作系統(tǒng)實(shí)驗(yàn)(實(shí)驗(yàn)二三四)_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/17/9fc2d468-5d79-4285-b7de-6ea43861ea91/9fc2d468-5d79-4285-b7de-6ea43861ea913.gif)
![操作系統(tǒng)實(shí)驗(yàn)(實(shí)驗(yàn)二三四)_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/17/9fc2d468-5d79-4285-b7de-6ea43861ea91/9fc2d468-5d79-4285-b7de-6ea43861ea914.gif)
![操作系統(tǒng)實(shí)驗(yàn)(實(shí)驗(yàn)二三四)_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/17/9fc2d468-5d79-4285-b7de-6ea43861ea91/9fc2d468-5d79-4285-b7de-6ea43861ea915.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)二 進(jìn)程管理設(shè)計(jì)一. 目的和要求進(jìn)程調(diào)度是處理機(jī)管理的核心內(nèi)容。本實(shí)驗(yàn)要求用C語(yǔ)言編寫(xiě)和調(diào)試一個(gè)簡(jiǎn)單的進(jìn)程調(diào)度程序。通過(guò)本實(shí)驗(yàn)可以加深理解有關(guān)進(jìn)程控制塊、進(jìn)程隊(duì)列的概念,并體會(huì)和了解優(yōu)先數(shù)和時(shí)間片輪轉(zhuǎn)調(diào)度算法的具體實(shí)施辦法。二. 實(shí)驗(yàn)內(nèi)容1. 設(shè)計(jì)進(jìn)程控制塊PCB表結(jié)構(gòu),分別適用于優(yōu)先數(shù)調(diào)度算法和循環(huán)輪轉(zhuǎn)算法。PCB結(jié)構(gòu)通常包括以下信息:進(jìn)程名、進(jìn)程優(yōu)先數(shù)(或輪轉(zhuǎn)時(shí)間片)、進(jìn)程所占用的CPU時(shí)間、進(jìn)程的狀態(tài)、當(dāng)前隊(duì)列指針等。根據(jù)調(diào)度算法的不同,PCB結(jié)構(gòu)的內(nèi)容可以做適當(dāng)?shù)膭h除。2. 建立進(jìn)程就緒隊(duì)列,對(duì)兩種不同算法編制入鏈子程序。3. 編制兩種進(jìn)程調(diào)度算法:1)優(yōu)先數(shù)調(diào)度;2)循環(huán)輪轉(zhuǎn)調(diào)度
2、。三. 實(shí)驗(yàn)環(huán)境1. IBM 286以上微型計(jì)算機(jī)及其兼容機(jī)。2. DOS系統(tǒng)要求3.3及更高的版本。3. TURBO C 2.0。四. 實(shí)驗(yàn)要求本實(shí)驗(yàn)要求用C 語(yǔ)言編寫(xiě),選用優(yōu)先數(shù)算法和簡(jiǎn)單時(shí)間片輪轉(zhuǎn)法對(duì)五個(gè)進(jìn)程進(jìn)行調(diào)度,每個(gè)進(jìn)程可以有三種狀態(tài):運(yùn)行狀態(tài)(RUN)、就緒狀態(tài)(READY)和完成狀態(tài)(FINISH)。并假定初始狀態(tài)為就緒狀態(tài)。五. 模擬算法提示1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)進(jìn)程控制塊結(jié)構(gòu)如下:PCB:NAMEPRIO/ROUND CPUTIMECOUNTNEEDTIMESTATENEXT其中:NAME進(jìn)程標(biāo)識(shí)符PRIO進(jìn)程優(yōu)先數(shù)ROUND進(jìn)程輪轉(zhuǎn)時(shí)間片CPUTIME進(jìn)程占用CPU時(shí)間COUN
3、T計(jì)數(shù)器NEEDTIME進(jìn)程完成還要的CPU時(shí)間STATE進(jìn)程的狀態(tài)NEXT鏈指針進(jìn)程控制塊鏈結(jié)構(gòu)中主要指針如下: RUN當(dāng)前運(yùn)行進(jìn)程指針READY就緒隊(duì)列頭指針TAIL就緒隊(duì)列尾指針FINISH完成隊(duì)列頭指針為了方便處理,程序中進(jìn)程的運(yùn)行時(shí)間以時(shí)間片為單位計(jì)算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時(shí)間片數(shù)以及進(jìn)程需運(yùn)行的時(shí)間片數(shù)的初值均由用戶給定。2程序說(shuō)明1)在優(yōu)先數(shù)算法中,進(jìn)程每執(zhí)行一次,優(yōu)先數(shù)減3,CPU時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片數(shù)減1。在輪轉(zhuǎn)法中,采用固定時(shí)間片,時(shí)間片數(shù)為2,進(jìn)程每次執(zhí)行一次,CPU時(shí)間片加2,進(jìn)程還需要的時(shí)間片數(shù)減2,并排列就緒隊(duì)列的尾上。2) 程序結(jié)構(gòu)說(shuō)明如下:整個(gè)程序由
4、FIRSTIN,INSERT1,INSERT2,PRINT,CREAT,PRISCH和ROUNDSCH函數(shù)組成。其中:INSERT1的功能是把還未完成且優(yōu)先數(shù)小于別的進(jìn)程的進(jìn)程PCB按進(jìn)程優(yōu)先數(shù)的順序插入到就緒隊(duì)列中。INSERT2是輪轉(zhuǎn)法使用的函數(shù),將執(zhí)行了一個(gè)單位時(shí)間片數(shù)(為2)且還未完成的進(jìn)程的PCB插到就緒隊(duì)列的隊(duì)尾。FIRSTIN 的功能是將就緒隊(duì)列中的第一個(gè)進(jìn)程投入運(yùn)行。PRINT打印每執(zhí)行一個(gè)時(shí)間片后的所有進(jìn)程的狀態(tài),這里,就緒(等待)用“W”代表。CREATE 的功能是創(chuàng)建新的進(jìn)程,即創(chuàng)立進(jìn)程的PCB,并將此PCB鏈入到就緒隊(duì)列中去。PRISCH按優(yōu)先數(shù)算法調(diào)度進(jìn)程。ROUND
5、SCH按時(shí)間片輪轉(zhuǎn)法調(diào)度進(jìn)程。主程序中定義了PCB 的結(jié)構(gòu)和其它變量:number進(jìn)程數(shù),algo為10個(gè)字符長(zhǎng)的字符串,存放要求輸入的算法的名,PRIORITY 為優(yōu)先數(shù)算法,ROUNDROBIN為循環(huán)輪轉(zhuǎn)法,在程序運(yùn)行時(shí)輸入其中的一個(gè)。3主要算法 算法 PRISCH while (當(dāng)前運(yùn)行進(jìn)程不為空) 進(jìn)程占用CPU 時(shí)間加1 進(jìn)程到完成還要的CPU時(shí)間減1 進(jìn)程優(yōu)先數(shù)減3 if(進(jìn)程到完成還要的CPU時(shí)間為0) 將該進(jìn)程插入到完成隊(duì)列中 修改該進(jìn)程狀態(tài) 當(dāng)前運(yùn)行進(jìn)程指針為空 if(就緒隊(duì)列不為空) FIRSTIN函數(shù) else if (就緒隊(duì)列不為空且當(dāng)前進(jìn)程優(yōu)先數(shù)小于就緒隊(duì)列中第一 個(gè)
6、進(jìn)程的優(yōu)先數(shù)) 修改當(dāng)前進(jìn)程狀態(tài)為W INSERT1函數(shù) FIRSTIN函數(shù) PRINT函數(shù) 算法 ROUNDSCH while (當(dāng)前運(yùn)行進(jìn)程不為空) 進(jìn)程占用CPU 時(shí)間加1 進(jìn)程到完成還要的CPU時(shí)間減1 進(jìn)程計(jì)數(shù)器加1 if(進(jìn)程到完成還要的CPU時(shí)間為0) 將該進(jìn)程插入到完成隊(duì)列中 修改該進(jìn)程狀態(tài) 當(dāng)前運(yùn)行進(jìn)程指針為空 if(就緒隊(duì)列不為空) FIRSTIN過(guò)程 else if (進(jìn)程計(jì)數(shù)器等于進(jìn)程輪轉(zhuǎn)時(shí)間片) 修改當(dāng)前進(jìn)程計(jì)數(shù)器為0 if(就緒隊(duì)列不為空) 修改當(dāng)前進(jìn)程狀態(tài)為W INSERT2過(guò)程 FIRSTIN過(guò)程 PRINT過(guò)程 六. 實(shí)驗(yàn)報(bào)告1 實(shí)驗(yàn)題目。2 采用的數(shù)據(jù)結(jié)構(gòu)及
7、符號(hào)說(shuō)明。3 打印一份源程序清單,并附加流程圖與注釋。4 打印出兩種算法的執(zhí)行結(jié)果。5 比較兩種算法的優(yōu)缺點(diǎn)并分析實(shí)驗(yàn)過(guò)程中遇到的問(wèn)題,談?wù)剬?shí)驗(yàn)后的體會(huì)。實(shí)驗(yàn)三 進(jìn)入VI編輯器格式:vi 文件名例 :vi sy.cVi編輯器三種工作方式:1 編輯方式:進(jìn)入VI 處于編輯方式2 文本輸入方式:在編輯方式下輸入a ,進(jìn)入追加方式,輸入i,進(jìn)入插入方式3 命令方式:在輸入方式下,按Esc 鍵,由文本輸入轉(zhuǎn)向編輯方式,輸入冒號(hào):進(jìn)入命令方式4 退出vi : wq寫(xiě)文件退出:w wenjianming 寫(xiě)文件: q! 不寫(xiě)退出:wq! 寫(xiě)退出編譯c文件Gcc -o wenjianming.out wen
8、jianming.c運(yùn)行文件:./wenjianming.out1 實(shí)驗(yàn)內(nèi)容和目的用vi編輯器編輯下列文件,使用gcc編譯器和gdb調(diào)試器,對(duì)下列程序編譯運(yùn)行,分析運(yùn)行結(jié)果。要求至少完成3個(gè)程序。2程序示例(1) /* 父子進(jìn)程之間的同步之例 */#include <stdio.h> Main( ) Int pid1;If(pid1=fork() /*create child1 */ if (fork() /*create the child2*/ printf (“parents context.n”); Printf(“parent is waiting the child1
9、terminate.n); Wait(0);Printf(“parent is waiting the child2 terminate.n”);Wait(0);Printf(“parent terminate.n”);Exit(0); Else /* child2*/ Printf(“child2s context.n”); Sleep(5); Printf(“ child2 terminate.n”); Exit(0); Else if(pid1=0)/* child1 */ printf(“child1s context.n”); Sleep(10); Printf(“child1 te
10、rminate.n”); Exit(0); 分析: 上述程序是父進(jìn)程首先創(chuàng)建一個(gè)子進(jìn)程,若成功,再創(chuàng)建另一個(gè)子進(jìn)程,之后三個(gè)進(jìn)程并發(fā)執(zhí)行。究竟誰(shuí)先執(zhí)行,是隨機(jī)的,可根據(jù)執(zhí)行結(jié)果判斷。試分析該程序的所有運(yùn)行結(jié)果。注釋: fork( ) 調(diào)用正確完成時(shí),給父進(jìn)程返回地是被創(chuàng)建子進(jìn)程的標(biāo)識(shí),給子進(jìn)程返回的是0;創(chuàng)建失敗時(shí),返回給父進(jìn)程的時(shí)1;Exit(0) 進(jìn)程終止自己Wait(0) 父進(jìn)程同步等待子進(jìn)程結(jié)束,即無(wú)子進(jìn)程結(jié)束,父進(jìn)程等待。(2)管道通信機(jī)制通過(guò)使用管道實(shí)現(xiàn)兩個(gè)和多個(gè)進(jìn)程之間的通信。所謂管道,就是將一個(gè)進(jìn)程的標(biāo)準(zhǔn)輸出與另一個(gè)進(jìn)程的標(biāo)準(zhǔn)輸入聯(lián)系在一起,進(jìn)行通信的一種方法。同組進(jìn)程之間可用
11、無(wú)名管道進(jìn)行通信,不同組進(jìn)程可通過(guò)有名管道通信。使用無(wú)名管道進(jìn)行父子進(jìn)程之間的通信 include <sys/types.h>#include<ctype.h>#include<unistd.h>Int pipe( int filedes2);Char parent=”A message to pipe communication.n”;Main() int pid,chan12; Char buf100; Pipe(chan1); Pid=fork();If(pid<0) printf(“to create child errorn”); Exit(
12、1);If(pid>0) close(chan10); /*父進(jìn)程關(guān)閉讀通道*/ Printf(“parent process sends a message to child.n”); Write(chan11,parent,sizeof(parent); Close(chan11); Printf(“parent process waits the child to terminate.n”); Wait(0);Printf(“parent process terminates.n”);Else Close(chan11);/*子進(jìn)程關(guān)閉寫(xiě)通道*/ Read(chan10,buf,1
13、00); Printf(“the message read by child process form parent is %s.n”,buf); Close (chan10); Printf(“child process terminatesn”);觀察運(yùn)行結(jié)果。注釋:pipe( int filedes2):創(chuàng)建一個(gè)無(wú)名管道,filedes0為讀通道,filedes1為寫(xiě)通道。(3)Linux中的多線程編程threads.c#include <pthread.h>#include <stdio.h>#include <sys/time.h>#include
14、 <string.h>#define MAX 10pthread_t thread2;pthread_mutex_t mut;int number=0, i;void *thread1() printf ("thread1 : I'm thread 1n"); for (i = 0; i < MAX; i+) printf("thread1 : number = %dn",number); pthread_mutex_lock(&mut); number+; pthread_mutex_unlock(&mut);
15、 sleep(2); printf("thread1 :主函數(shù)在等我完成任務(wù)嗎?n"); pthread_exit(NULL);void *thread2() printf("thread2 : I'm thread 2n"); for (i = 0; i < MAX; i+) printf("thread2 : number = %dn",number); pthread_mutex_lock(&mut); number+; pthread_mutex_unlock(&mut); sleep(3); p
16、rintf("thread2 :主函數(shù)在等我完成任務(wù)嗎?n"); pthread_exit(NULL);void thread_create(void) int temp; memset(&thread, 0, sizeof(thread); /comment1 /*創(chuàng)建線程*/ if(temp = pthread_create(&thread0, NULL, thread1, NULL) != 0) /comment2 printf("線程1創(chuàng)建失敗!n"); else printf("線程1被創(chuàng)建n"); if(t
17、emp = pthread_create(&thread1, NULL, thread2, NULL) != 0) /comment3 printf("線程2創(chuàng)建失敗"); else printf("線程2被創(chuàng)建n");void thread_wait(void) /*等待線程結(jié)束*/ if(thread0 !=0) /comment4 pthread_join(thread0,NULL); printf("線程1已經(jīng)結(jié)束n"); if(thread1 !=0) /comment5 pthread_join(thread1,N
18、ULL); printf("線程2已經(jīng)結(jié)束n"); int main() /*用默認(rèn)屬性初始化互斥鎖*/ pthread_mutex_init(&mut,NULL); printf("我是主函數(shù)哦,我正在創(chuàng)建線程,呵呵n"); thread_create(); printf("我是主函數(shù)哦,我正在等待線程完成任務(wù)阿,呵呵n"); thread_wait(); return 0;注意:Gcc lpthread o thread.out thread.c線程相關(guān)操作1) pthread_tpthread_t在頭文件/usr/inc
19、lude/bits/pthreadtypes.h中定義: typedef unsigned long int pthread_t; 它是一個(gè)線程的標(biāo)識(shí)符。2)pthread_create函數(shù)pthread_create用來(lái)創(chuàng)建一個(gè)線程,它的原型為: extern int pthread_create _P (pthread_t *_thread, _const pthread_attr_t *_attr, void *(*_start_routine) (void *), void *_arg); 第一個(gè)參數(shù)為指向線程標(biāo)識(shí)符的指針,第二個(gè)參數(shù)用來(lái)設(shè)置線程屬性,第三個(gè)參數(shù)是線程運(yùn)行函數(shù)的起始地址
20、,最后一個(gè)參數(shù)是運(yùn)行函數(shù)的參數(shù)。這里,我們的函數(shù)thread不需要參數(shù),所以最后一個(gè)參數(shù)設(shè)為空指針。第二個(gè)參數(shù)我們也設(shè)為空指針,這樣將生成默認(rèn)屬性的線程。對(duì)線程屬性的設(shè)定和修改我們將在下一節(jié)闡述。當(dāng)創(chuàng)建線程成功時(shí),函數(shù)返回0,若不為0則說(shuō)明創(chuàng)建線程失敗,常見(jiàn)的錯(cuò)誤返回代碼為EAGAIN和EINVAL。前者表示系統(tǒng)限制創(chuàng)建新的線程,例如線程數(shù)目過(guò)多了;后者表示第二個(gè)參數(shù)代表的線程屬性值非法。創(chuàng)建線程成功后,新創(chuàng)建的線程則運(yùn)行參數(shù)三和參數(shù)四確定的函數(shù),原來(lái)的線程則繼續(xù)運(yùn)行下一行代碼。3)pthread_join pthread_exit函數(shù)pthread_join用來(lái)等待一個(gè)線程的結(jié)束。函數(shù)原型為
21、:extern int pthread_join _P (pthread_t _th, void *_thread_return);第一個(gè)參數(shù)為被等待的線程標(biāo)識(shí)符,第二個(gè)參數(shù)為一個(gè)用戶定義的指針,它可以用來(lái)存儲(chǔ)被等待線程的返回值。這個(gè)函數(shù)是一個(gè)線程阻塞的函數(shù),調(diào)用它的函數(shù)將一直等待到被等待的線程結(jié)束為止,當(dāng)函數(shù)返回時(shí),被等待線程的資源被收回。一個(gè)線程的結(jié)束有兩種途徑,一種是象我們上面的例子一樣,函數(shù)結(jié)束了,調(diào)用它的線程也就結(jié)束了;另一種方式是通過(guò)函數(shù)pthread_exit來(lái)實(shí)現(xiàn)。它的函數(shù)原型為:extern void pthread_exit _P (void *_retval) _attr
22、ibute_ (_noreturn_);唯一的參數(shù)是函數(shù)的返回代碼,只要pthread_join中的第二個(gè)參數(shù)thread_return不是NULL,這個(gè)值將被傳遞給 thread_return。最后要說(shuō)明的是,一個(gè)線程不能被多個(gè)線程等待,否則第一個(gè)接收到信號(hào)的線程成功返回,其余調(diào)用pthread_join的線程則返回錯(cuò)誤代碼ESRCH。在這一節(jié)里,我們編寫(xiě)了一個(gè)最簡(jiǎn)單的線程,并掌握了最常用的三個(gè)函數(shù)pthread_create,pthread_join和pthread_exit。下面,我們來(lái)了解線程的一些常用屬性以及如何設(shè)置這些屬性?;コ怄i相關(guān)互斥鎖用來(lái)保證一段時(shí)間內(nèi)只有一個(gè)線程在執(zhí)行一段代
23、碼。1) pthread_mutex_init 函數(shù)pthread_mutex_init用來(lái)生成一個(gè)互斥鎖。NULL參數(shù)表明使用默認(rèn)屬性。如果需要聲明特定屬性的互斥鎖,須調(diào)用函數(shù) pthread_mutexattr_init。函數(shù)pthread_mutexattr_setpshared和函數(shù) pthread_mutexattr_settype用來(lái)設(shè)置互斥鎖屬性。前一個(gè)函數(shù)設(shè)置屬性pshared,它有兩個(gè)取值, PTHREAD_PROCESS_PRIVATE和PTHREAD_PROCESS_SHARED。前者用來(lái)不同進(jìn)程中的線程同步,后者用于同步本進(jìn)程的不同線程。在上面的例子中,我們使用的是默認(rèn)
24、屬性PTHREAD_PROCESS_ PRIVATE。后者用來(lái)設(shè)置互斥鎖類型,可選的類型有PTHREAD_MUTEX_NORMAL、PTHREAD_MUTEX_ERRORCHECK、 PTHREAD_MUTEX_RECURSIVE和PTHREAD _MUTEX_DEFAULT。它們分別定義了不同的上鎖、解鎖機(jī)制,一般情況下,選用最后一個(gè)默認(rèn)屬性。2) pthread_mutex_lock pthread_mutex_unlock pthread_delay_np pthread_mutex_lock聲明開(kāi)始用互斥鎖上鎖,此后的代碼直至調(diào)用pthread_mutex_unlock為止,均被上鎖,
25、即同一時(shí)間只能被一個(gè)線程調(diào)用執(zhí)行。當(dāng)一個(gè)線程執(zhí)行到pthread_mutex_lock處時(shí),如果該鎖此時(shí)被另一個(gè)線程使用,那此線程被阻塞,即程序?qū)⒌却搅硪粋€(gè)線程釋放此互斥鎖。注意:1)需要說(shuō)明的是,上面的兩處sleep不光是為了演示的需要,也是為了讓線程睡眠一段時(shí)間,讓線程釋放互斥鎖,等待另一個(gè)線程使用此鎖。下面的參考資料1里頭說(shuō)明了該問(wèn)題。但是在linux下好像沒(méi)有pthread_delay_np那個(gè)函數(shù)(我試了一下,提示沒(méi)有定義該函數(shù)的引用),所以我用了sleep來(lái)代替,不過(guò)參考資料2中給出另一種方法,好像是通過(guò)pthread_cond_timedwait來(lái)代替,里頭給出了一種實(shí)現(xiàn)的辦法
26、。2)請(qǐng)千萬(wàn)要注意里頭的注釋comment1-5,如果沒(méi)有comment1和comment4,comment5,將導(dǎo)致在pthread_join的時(shí)候出現(xiàn)段錯(cuò)誤,另外,上面的comment2和comment3是根源所在,所以千萬(wàn)要記得寫(xiě)全代碼。因?yàn)樯厦娴木€程可能沒(méi)有創(chuàng)建成功,導(dǎo)致下面不可能等到那個(gè)線程結(jié)束,而在用pthread_join的時(shí)候出現(xiàn)段錯(cuò)誤(訪問(wèn)了未知的內(nèi)存區(qū))。另外,在使用memset的時(shí)候,需要包含string.h頭文件。實(shí)驗(yàn)四 1實(shí)驗(yàn)內(nèi)容與目的 熟悉有關(guān)文件的系統(tǒng)調(diào)用,學(xué)習(xí)文件系統(tǒng)的系統(tǒng)調(diào)用命令,提高對(duì)文件系統(tǒng)實(shí)現(xiàn)功能的理解和掌握。使用creat open read writ
27、e 等系統(tǒng)調(diào)用用C語(yǔ)言編程實(shí)現(xiàn)復(fù)制文件。2注釋(1) Int creat(const char *pathname, mode_t mode);返回值:如果正確創(chuàng)建,返回文件的描述符;否則返回1;Pathname是要?jiǎng)?chuàng)建文件的路徑名。創(chuàng)建文件時(shí),文件只能以只寫(xiě)方式打開(kāi)Mode 用來(lái)規(guī)定該文件的擁有者,小組用戶和其他用戶的訪問(wèn)權(quán)限,要求用按位邏輯加對(duì)下列符號(hào)常量進(jìn)行所需的組合(同open函數(shù))。(2) int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);i
28、nt close(int fd);open函數(shù)有兩個(gè)形式.其中pathname是我們要打開(kāi)的文件名(包含路徑名稱,缺省是認(rèn)為在當(dāng)前路徑下面).flags可以去下面的一個(gè)值或者是幾個(gè)值的組合.O_RDONLY:以只讀的方式打開(kāi)文件.O_WRONLY:以只寫(xiě)的方式打開(kāi)文件.O_RDWR:以讀寫(xiě)的方式打開(kāi)文件.O_APPEND:以追加的方式打開(kāi)文件.O_CREAT:創(chuàng)建一個(gè)文件.O_EXEC:如果使用了O_CREAT而且文件已經(jīng)存在,就會(huì)發(fā)生一個(gè)錯(cuò)誤.O_NOBLOCK:以非阻塞的方式打開(kāi)一個(gè)文件.O_TRUNC:如果文件已經(jīng)存在,則刪除文件的內(nèi)容.前面三個(gè)標(biāo)志只能使用任意的一個(gè).如果使用了O_CR
29、EATE標(biāo)志,那么我們要使用open的第二種形式.還要指定mode標(biāo)志,用來(lái)表示文件的訪問(wèn)權(quán)限.mode可以是以下情況的組合.-S_IRUSR 用戶可以讀 S_IWUSR 用戶可以寫(xiě)S_IXUSR 用戶可以執(zhí)行 S_IRWXU 用戶可以讀寫(xiě)執(zhí)行-S_IRGRP 組可以讀 S_IWGRP 組可以寫(xiě)S_IXGRP 組可以執(zhí)行 S_IRWXG 組可以讀寫(xiě)執(zhí)行-S_IROTH 其他人可以讀 S_IWOTH 其他人可以寫(xiě)S_IXOTH 其他人可以執(zhí)行 S_IRWXO 其他人可以讀寫(xiě)執(zhí)行-S_ISUID 設(shè)置用戶執(zhí)行ID S_ISGID 設(shè)置組的執(zhí)行ID- 我們也可以用數(shù)字來(lái)代表各個(gè)位的標(biāo)志.Linux總共用5個(gè)數(shù)字來(lái)表示文件的各種權(quán)限
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年臨沂道路運(yùn)輸從業(yè)人員資格考試內(nèi)容有哪些
- 電瓶車撞車調(diào)解協(xié)議書(shū)(2篇)
- 電力售后服務(wù)合同(2篇)
- 2024-2025學(xué)年高中政治第一單元生活與消費(fèi)課題能力提升三含解析新人教版必修1
- 二年級(jí)教師下學(xué)期工作總結(jié)
- 一學(xué)期教學(xué)工作總結(jié)
- 公司設(shè)計(jì)師工作總結(jié)
- 老師教研年度工作總結(jié)
- 入團(tuán)申請(qǐng)書(shū)模板
- 公司員工培訓(xùn)計(jì)劃方案
- 固廢運(yùn)輸方案
- 醫(yī)療美容門診病歷
- 停車場(chǎng)管理外包服務(wù)合同
- 醫(yī)療健康-泌尿生殖系統(tǒng)外科疾病主要癥狀醫(yī)學(xué)課件
- 中國(guó)節(jié)能協(xié)會(huì)團(tuán)體標(biāo)準(zhǔn)草案模板
- 招投標(biāo)現(xiàn)場(chǎng)項(xiàng)目經(jīng)理答辯(完整版)資料
- 大學(xué)開(kāi)學(xué)第一課班會(huì)PPT
- 企業(yè)新春茶話會(huì)PPT模板
- 重大事故隱患整改臺(tái)賬
- DB15T 2058-2021 分梳綿羊毛標(biāo)準(zhǔn)
- (高職)銀行基本技能ppt課件(完整版)
評(píng)論
0/150
提交評(píng)論