(實驗2)檔案IO實驗

2021-10-01 10:32:50 字數 4284 閱讀 8877

(1)將原始檔複製到另外乙個檔案(將test1.text複製成test2.txt)

[test@linux test]$ .

/mycp /home/test1.txt /usr/test2.txt

(2)將原始檔複製到另外乙個目錄(將test1.txt複製到/tmp目錄)

[test@linux test]$ .

/mycp /home/test1.txt /tmp

原始檔路徑和目標檔案路徑通過命令列引數來指定

引數(字串形式)

cp命令:根據接收的命令列引數進行複製

✓ cp /usr/local/src/main.c /root/main.c(檔案到檔案複製)

✓ cp /usr/local/src/main.c /root (檔案到目錄複製)

✓ cp –r /usr/local/src /root(-r 遞迴複製,用於目錄到目錄的複製)

許可權不夠的情況,採用sudo cp xx xx的方式。

sudo,在linux中輸入sodu就是呼叫這個程式提公升許可權

作業系統啟動c程式-

>呼叫c啟動例程-

>例程獲取命令列引數-

>main函式接收

int main(

int argc, char* ar**)

argc:整型,輸入引數個數

ar**:字串陣列,儲存命令列引數

root@ubuntu:/root# ./pg i am new

ar**[1]

:iar**[2]

:amar**[3]

:new

#include 

int main(

int argc ,char* ar**)

return0;

}將左邊**編譯為hello.o

命令列中執行兩種命令:

->可執行檔名;

ar**[1]

-ar**[5]

->命令列引數

以字串的形式傳遞(空格作為命令列引數之間的分隔)

標頭檔案: fcntl.h

函式: int

open

( const char *pathname,

int oflag, …)

;作用: 開啟或者建立乙個檔案,返回值是開啟檔案的檔案描述符

pathname:檔案的路徑

oflag:開啟檔案的方式

…:變參建立新檔案時使用

oflag值 含義

o_rdonly 唯讀開啟

o_wronly 只寫開啟

o_rdwr 讀、寫開啟

oflag值 含義

o_creat 若此檔案不存在則建立它,此時需要第三個引數mode,

該引數約定了所建立檔案的許可權,計算方法mode&

~umask

o_excl 如同時指定了o_creat,此指令會檢查檔案是否存在,

若不存在則建立此檔案;若檔案存在,此時將出錯

o_trunc 如果此檔案存在,並以讀寫或只寫開啟,則檔案長度0

標頭檔案: unistd.h

函式: ssize_t read(

int filedes, void *buf, size_t nbytes)

;作用:從開啟的檔案中讀資料

返回值:

✓ 成功: 返回實際讀取的位元組數(例外情況:讀普通檔案,未到要求的位元組數前

就到達檔案末尾,此時返回位元組數不等於要求位元組數)

✓ 出錯: 返回-

1, 原因: 磁碟滿、許可權問題、超檔案長度限制

注: 讀操作完成後,檔案的當前位置變為之前位置+實際讀取位元組數

標頭檔案: unistd.h

函式: ssize_t write(

int filedes, const void *buf, size_t nbytes)

;作用: 向開啟的檔案中寫資料

返回值:

✓ 成功: 寫入成功返回實際寫入位元組數

✓ 出錯: 返回-

1, 原因: 磁碟滿、許可權問題、超檔案長度限制

注: 寫操作完成後,檔案的當前位置變為之前位置+實際寫入位元組數

標頭檔案: unistd.h

函式: int close(

int filedes)

作用: 關閉開啟的檔案

返回值:

✓ 成功: 返回0

✓ 出錯: 返回-

1注: 關閉後,不能通過該檔案描述符操作該檔案

標頭檔案: unistd.h

函式: off_t lseek(

int filedes, off_t offset,

int whence)

;作用:設定或查詢檔案當前位置

✓每個開啟檔案都有乙個「檔案當前位置」

✓開啟檔案時預設當前位置為檔案頭(0)

✓回憶:讀寫操作完成後檔案的當前位置變為之前位置+實際讀寫位元組數

檔案定位lseek函式的引數whence及offset(offset可正可負)

✓ whence=seek_set, 檔案當前位置=檔案頭+offset(位元組)

✓ whence=seek_cur, 檔案當前位置=檔案當前位置+offset(位元組)

✓ whence=seek_end, 檔案當前位置=檔案尾+offset(位元組)

呼叫posix api會發生錯誤,需要定位產生問題的更具體原因

系統錯誤碼: posix規範定義的記錄系統錯誤的標準碼,

使用方式: 通過全域性變數errorno獲取該錯誤碼,記錄最後一次錯誤

✓ extern errorno

✓ 標頭檔案: errorno.h

(1)將錯誤碼轉換為易讀的錯誤資訊:

函式1: char *strerror(

int errnum)

;標頭檔案: string.h

作用: 將errnum轉換為對應錯誤資訊(字串)

(2)函式2: void perror(const char * msg)

;標頭檔案: stdio.h

作用: 先輸出msg字串,然後輸出當前errorno對應錯誤資訊

#include //引入標頭檔案

extern errno;

//引入變數

int main(

int argc,char *ar**)

編譯為error.o

使用./error.o執行

得到如下結果:

#include //引入標頭檔案

extern errorno;

//引入變數

int main(

int argc, char *ar**)

close(fd_src)

; close(fd_dst)

; free(buf)

;return0;

}參考:https:

11561401

實驗7 檔案

實驗任務1 2 自行實踐完畢 實驗任務3 從文字資料檔案file1.dat中讀入資料,按成績從高到低排序,將排序結果輸出到螢幕上,同時以文字方式存入檔案file3.dat中。include include define n 10 定義乙個結構體型別stu typedef struct student...

實驗7 檔案

實驗任務3 執行程式,觀察到在螢幕上正確輸出了按分數由高到低排序的資訊,唯一不足的事對於漢字的解碼不正確導致輸出的學生姓名成了亂碼。同時,在當前格式下,生成了文字檔案file3.dat 嘗試用記事本程式開啟檔案file3.dat,觀察到裡面的資料資訊是正確的,並且是直觀可讀的 實驗任務4.1 執行程...

實驗3 檔案操作

一 實驗目的與要求 學會使用檔案操作函式實現對檔案開啟 關閉 讀 寫等操作。學會對資料檔案進行簡單的操作。深入理解 c 的輸入輸出的含義及其實現方法。掌握標準輸入輸出流的應用。二 實驗過程 2 用隨機函式根據文字檔案的記錄數量生成乙個隨機數 3 根據這個隨機數,從所讀取的記錄中找到對應的記錄,並輸出...