實(shí)驗(yàn)四文件系統(tǒng)_第1頁
實(shí)驗(yàn)四文件系統(tǒng)_第2頁
實(shí)驗(yàn)四文件系統(tǒng)_第3頁
實(shí)驗(yàn)四文件系統(tǒng)_第4頁
實(shí)驗(yàn)四文件系統(tǒng)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、word實(shí)驗(yàn)四 文件系統(tǒng)班級(jí): 姓名: 學(xué)號(hào):實(shí)驗(yàn)?zāi)康?. 學(xué)習(xí)Unix下對(duì)目錄文件信息的讀取。2. 學(xué)習(xí)Unix下對(duì)普通文件操作的系統(tǒng)調(diào)用。預(yù)備知識(shí)目錄文件操作所需頭文件:#include <dirent.h>所需系統(tǒng)調(diào)用:DIR* opendir(const char* dirname);功能:翻開一個(gè)目錄文件 成功 - 返回指向DIR類型對(duì)象的指針。失敗 - 返回NULL函數(shù)返回值DIR 代表一個(gè)目錄流的結(jié)構(gòu)體int closedir(DIR *dirp);功能:關(guān)閉一個(gè)已經(jīng)翻開的目錄文件成功 - 返回0;失敗 - 返回-1 struct dirent *readdir(DI

2、R *dirp);功能:讀取目錄流成功 - 返回指向struct dirent對(duì)象的指針,當(dāng)前位置向后移。 失敗 返回NULLstruct dirent long d_ino; /* inode number 索引節(jié)點(diǎn)號(hào) */ off_t d_off; /* offset to this dirent 在目錄文件中的偏移 */ unsigned short d_reclen; /* length of this d_name 文件名長(zhǎng) */ unsigned char d_type; /* the type of d_name 文件類型 */ char d_name NAME_MAX+1; /

3、* file name (null-terminated) 文件名,最長(zhǎng)255字符 */文件操作所需頭文件#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>所需系統(tǒng)調(diào)用:int open(const char *pathname, int flag, mode_t mode)功能:翻開一個(gè)文件,第一個(gè)參數(shù)為要翻開文件的路徑,第二個(gè)參數(shù)為翻開文件的方式,第三個(gè)參數(shù)用于設(shè)定文件的權(quán)限位。返回值為所翻開文件的文件描述符。例子:int fd =

4、open(“./file, O_CREAT|O_TRUNC|O_RDWR, 0600);ssize_t write(int fd, const void *buf, size_t count)功能:像fd所指向的文件寫入count個(gè)單位的buf中的數(shù)據(jù)。第一個(gè)參數(shù)為要寫入文件的文件描述符;第二個(gè)參數(shù)為被寫入數(shù)據(jù)所在的緩存區(qū);第三個(gè)參數(shù)為寫入單位個(gè)數(shù)。返回值:被成功寫入的單位個(gè)數(shù),或-1表示出錯(cuò)。例子:write(fd, buffer, 100);ssize_t read(int fd, void *buf, size_t count)功能:把fd所代表的文件中的內(nèi)容從當(dāng)前文件指針處文件指針用l

5、seek函數(shù)設(shè)定,默認(rèn)為0,最開始讀取count個(gè),然后存入buf中。返回值:成功讀取單位的個(gè)數(shù),-1表示出錯(cuò)。off_t lseek(int fd, off_t offset, int whence)功能:對(duì)fd所代表的文件的操作指針進(jìn)行定位。第一個(gè)參數(shù)為要操作文件的文件描述符;第二個(gè)參數(shù)為偏移量,其具體意義根據(jù)第三個(gè)參數(shù)而定。第三個(gè)參數(shù)whence 有以下三個(gè)選項(xiàng):SEEK_SET 直接重設(shè)文件操作指針,指針位置由第二個(gè)參數(shù)給出。SEEK_CUR重設(shè)文件指針,該選項(xiàng)表示把指針從當(dāng)前位置根據(jù)第二個(gè)參數(shù)所給定的數(shù)值進(jìn)行偏移,第二個(gè)參數(shù)為負(fù)數(shù)表示向前移動(dòng)offset個(gè)單位,為正數(shù)代表向后移動(dòng)of

6、fset個(gè)單位。SEEK_END將文件操作指針移動(dòng)到文件末尾, 再進(jìn)行offset個(gè)單位的偏移量。返回值:返回被重定位后的指針的偏移量從文件頭0開始計(jì)算)。例子:long file_length= lseek(fd, 0, SEEK_END);實(shí)驗(yàn)內(nèi)容1. 根據(jù)前面的預(yù)備知識(shí),補(bǔ)全下面的程序,該程序可以顯示某個(gè)目錄文件中所包含的文件名稱及其所對(duì)應(yīng)的i節(jié)點(diǎn)號(hào)。#include<stdio.h>#include<dirent.h>int main() DIR *dp; struct dirent *dirp; char dirname256; printf("Pl

7、ease input a directory: "); scanf("%s",dirname); if(dp = opendir(dirname) ) = NULL) printf("Can't open %sn", dirname); while(dirp = readdir(dp) ) != NULL) printf("%st%un", dirp->d_name , dirp->d_ino ); closedir(dp); return 0;2. 根據(jù)前面的預(yù)備知識(shí),補(bǔ)全下面的程序,要求:該程序在磁盤

8、上創(chuàng)立一個(gè)文件file1,并按順序在file1中存入從A-Z的26個(gè)字母。#include <fcntl.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <stdio.h>int main()int i;int fd;char buffer26="ABCDEFGHIJKLMNOPQRSTUVWXYZ"if(fd=open(“./file1,O_CREAT|O_RDWR,0600)write(fd, buffer, 26

9、);close(fd);return 0;3. 請(qǐng)寫出第二個(gè)程序,改程序要求翻開第一個(gè)程序所創(chuàng)立的文件,然后重定位當(dāng)前翻開文件指針到file1的中間位置,然后讀取后面的所有信息并打印在屏幕上,完成屏幕打印后,將文件中的'N'、'O'兩個(gè)字母替換為'1'、'0',然后保存到文件file1中。#include <fcntl.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <stdio.

10、h>int main()int i;int fd; char* c1=1; char* c2=0;char buffer13;if(fd=open(“./file1, O_RDWR,0600) file_length=lseek(fd,0,SEEK_END); lseek(fd, file_length/2,SEEK_SET);read(fd, buffer, file_length-file_length/2);printf(“%sn,buffer);lseek(fd,13,SEEK_SET);write(fd,c1,1);lseek(fd,0,SEEK_CUR);write(fd,c

11、2,1); close(fd);return 0;實(shí)驗(yàn)結(jié)果1. 目錄操作程序運(yùn)行結(jié)果截圖,在程序同一目錄中建立一個(gè)目錄“folder,然后向folder中隨意放置幾個(gè)文件,運(yùn)行程序,在讓程序顯示“folder中的信息,文件名和文件所對(duì)應(yīng)的i節(jié)點(diǎn)號(hào)。在截圖后請(qǐng)解釋該程序系統(tǒng)調(diào)用及其參數(shù):scanf("%s",dirname);程序獲得文件名./folder存在字符串dirname中.dp = opendir(dirname)程序調(diào)用opendir(“./folder)翻開當(dāng)前目錄下的目錄folder,并返回DIR結(jié)構(gòu)體指針.if(dp = opendir(dirname) )

12、 = NULL)printf("Can't open %sn", dirname);假設(shè)dp為null,即文件不存在或有其他運(yùn)行的問題,那么輸出Cant open ./folderwhile(dirp = readdir(dp) ) != NULL)printf("%st%un", dirp->d_name, dirp->d_ino);調(diào)用readdir(dp)方法讀取目錄下的文件并將每個(gè)文件對(duì)應(yīng)的信息結(jié)構(gòu)體dirent存入dirp.輸出dirp結(jié)構(gòu)體中的文件名并對(duì)應(yīng)的索引號(hào)i直到讀完所有文件,即dirp=null.closedir(

13、dp);目錄文件使用完畢,關(guān)閉文件.2. 文件操作第一個(gè)程序運(yùn)行結(jié)果截圖先用ls -l列出當(dāng)前目錄中的文件,然后運(yùn)行第一個(gè)程序,再用cat命令顯示生成文件的內(nèi)容,在截圖后請(qǐng)解釋該程序系統(tǒng)調(diào)用及其參數(shù):char buffer26="ABCDEFGHIJKLMNOPQRSTUVWXYZ"定義字符串buffer26來存儲(chǔ)26個(gè)字母.fd=open(“./file1,O_CREAT|O_RDWR,0600)翻開(假設(shè)當(dāng)前目錄下沒有file1那么創(chuàng)立并翻開)當(dāng)前目錄下的file1文件(可進(jìn)行讀寫操作),并返回int變量(所翻開文件的文件描述符)的給fd.write(fd, buffe

14、r, 26);向文件file1中寫入26個(gè)字符大小的字符串buffer.closedir(fp);文件使用完畢,關(guān)閉文件.3. 文件操作第二個(gè)程序運(yùn)行結(jié)果截圖運(yùn)行第二個(gè)程序,然后用cat命令顯示被修改正后的文件內(nèi)容,在截圖后請(qǐng)解釋該程序系統(tǒng)調(diào)用及其參數(shù)。char* c1=1;char* c2=0;定義char*.fd=open(“./file1, O_RDWR,0600)翻開當(dāng)前目錄下的file1文件(可進(jìn)行讀寫操作),并返回int變量(所翻開文件的文件描述符)的給fd.file_length=lseek(fd,0,SEEK_END);獲得文件長(zhǎng)度file_length.lseek(fd, file_length/2,SEEK_SET);重置文件指針于中間位置.read(fd, buffer, file

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論