下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明在用戶程序中是如何使用系統(tǒng)調(diào)用的。例如,要寫一個(gè)簡(jiǎn)單的程序,用于從一個(gè)文件中讀出數(shù)據(jù),再將該數(shù)據(jù)復(fù)制到另一文件中。為此,首先須輸入該程序的輸入文件名和輸出文件名。文件名可用多種方式指定,一種方式是由程序詢問(wèn)用戶兩個(gè)文件的名字。
在交互式系統(tǒng)中,該方式要使用一系列的系統(tǒng)調(diào)用,先在屏幕上打印出一系列的提示信息,然后從鍵盤終端讀入定義兩個(gè)義件名的字符串。一旦獲得兩個(gè)文件名后,程序又必須利用系統(tǒng)凋用open去打開(kāi)輸入文件,并用系統(tǒng)凋用creat去創(chuàng)建指定的輸出文件;在執(zhí)行叩⑶系統(tǒng)調(diào)用時(shí),又可能發(fā)生錯(cuò)誤。
例如,程序試圖去打開(kāi)一個(gè)不存在的文件;或者該文件雖然存在,但并不允許被訪問(wèn)等。此時(shí),程序又須利用一系列系統(tǒng)調(diào)用去顯示出錯(cuò)信息,繼而再利用一個(gè)系統(tǒng)凋用去實(shí)現(xiàn)程序的異常終止。類似地,在執(zhí)行系統(tǒng)調(diào)用creat時(shí),同樣可能出現(xiàn)錯(cuò)誤。例如,系統(tǒng)中存在與輸出文件同名的另一文件,這時(shí)又須利用一系統(tǒng)調(diào)用來(lái)結(jié)束程序;或者利用一個(gè)系統(tǒng)調(diào)用來(lái)刪除巳存在的那個(gè)同名文件,然后,再利用creat來(lái)創(chuàng)建輸出文件。
在打開(kāi)輸入文件和創(chuàng)建輸出文件都獲得成功后,還須利用_請(qǐng)內(nèi)存的系統(tǒng)調(diào)用alloc根據(jù)文件的大小申請(qǐng)一個(gè)緩沖區(qū)。成功后,再利用read系統(tǒng)凋用從輸入文件中把數(shù)據(jù)讀到緩沖區(qū)內(nèi),讀完后,再用系統(tǒng)調(diào)用close去關(guān)閉輸入文件。然后利用write系統(tǒng)調(diào)用,把緩沖區(qū)內(nèi)的數(shù)據(jù)寫到輸出文件中。在讀或?qū)懖僮髦校捕伎赡苄枰厮透鞣N出錯(cuò)信息。
比如,在輸入時(shí)可能發(fā)現(xiàn)已到達(dá)文件末尾(指定的字符數(shù)尚未讀夠),或者,在讀過(guò)程中發(fā)現(xiàn)硬件故障(如奇、偶錯(cuò));在寫操作中可能遇見(jiàn)各種與輸出設(shè)備類型有關(guān)的錯(cuò)誤,比如,已無(wú)磁盤空間,打印機(jī)缺紙等。在將整個(gè)文件復(fù)制完后,程序又須凋用close去關(guān)閉輸出文件,并向控制臺(tái)回送一條消息以提示復(fù)制完畢。最后,再利用系統(tǒng)調(diào)用exit使程序正常結(jié)朿。
通過(guò)這個(gè)例子可以看出,一個(gè)用戶程序?qū)㈩l繁地利用各種系統(tǒng)調(diào)用以取得OS所提供的各種服務(wù)。
新聞熱點(diǎn)
疑難解答