操作系統實驗4系統調用聯繫

NO IMAGE

2017-4-26

實驗目的

·熟悉read,write等系統調用的使用

·通過編寫程序利用相應的系統調用實現cp命令

實驗內容

[基本要求]

編寫Linux環境下C程序,使用read,write,close等系統調用

[具體要求]

·使用系統調用編寫程序實現cp命令的功能

·代碼有註釋,提交實驗報告

[進一步要求]

·讀入輸入的文件名

·讀入文件路徑(絕對路徑/相對路徑)

·實現cp命令的功能

實驗報告

1.細節說明

1)cp命令:用於將一個或多個源文件或者目錄複製到指定的目的文件或目錄。它可以將單個源文件複製成一個指定文件名的具體的文件或一個已經存在的目錄下。

可能涉及的系統調用:create、open、close、write、read.

2open:打開一個已經存在的文件(普通文件、特殊文件或命名管道),或創建一個新文件,但它只能創建普通文件。

定義:

intopen(const char *pathname, int flags);

intopen(const char *pathname, int flags, mode_t mode);

返回值:成功返回新分配的文件描述符,出錯返回-1並設置errno

pathname參數:要打開或創建的文件名,和fopen一樣,pathname既可以是相對路徑也可以是絕對路徑。

flags參數:有一系列常數值可供選擇,可以同時選擇多個常數用按位或運算符連接起來,所以這些常數的宏定義都以O_開頭,表示or。

必選項:以下三個常數中必須指定一個,且僅允許指定一個。

O_RDONLY只讀打開

O_WRONLY只寫打開

O_RDWR可讀可寫打開

第三個參數mode指定文件權限,可以用八進制數表示,比如0644表示用戶具有讀寫權限,組用戶和其它用戶具有隻讀權限

3)close:關閉一個已打開的文件

定義 

intclose(int fd);

返回值:成功返回0,出錯返回-1並設置errno

參數fd是要關閉的文件描述符。需要說明的是,當一個進程終止時,內核對該進程所有尚未關閉的文件描述符

4create使用creat函數創建一個新文件,如果原來該文件存在,會將這個文件的長度截短為0

intcreate(const char * pathname, mode_t mode);

如果成功則返回為只寫打開的文件描述符,出錯則返回-1。

該函數用於創建一個新文件,等效於

open(pathname,O_WRONLY | O_CREAT | O_TRUNC, mode)

2.完成情況:

可以做到:讀入輸入的文件名、讀入文件路徑(包括絕對和相對)、實現cp命令功能(暫時實現一對一的複製)

3.設計思路

設計一個緩衝區,用open打開源文件,將文件內容讀取到緩衝區中,再將緩衝區的內容寫進目標文件(用create創建的)根據調用的返回值判斷是否成功。

4.實驗結果

相對路徑尋找文件

絕對路徑尋找文件

5.實驗中遇到的問題

輸入絕對路徑時經常報錯

解決方案:原來是windows路徑名和linux路徑名有差別的問題

在Unix/Linux中,路徑的分隔採用正斜槓”/”,比如”/home/hutaow”;而在Windows中,路徑分隔採用反斜槓”\”,比如”C:\Windows\System”。

補充:

以下面這些開頭的路徑是絕對路徑:

UNC名字,兩個反斜槓開頭\\

盤符冒號加反斜槓開頭,例如C:\

一個反斜槓開頭,例如\file.txt

相關文章

計算機網絡實驗4:鏈路層分析與組網

IntroductiontoAlgorithm

計算機網絡實驗五:虛擬局域網技術

編譯原理實驗1:詞法分析