作業系統第四次實驗報告 檔案系統

2022-09-04 07:33:09 字數 2970 閱讀 9442

#include#include#include#include#include#include#include#include#include#include#include #define name_size 20

struct fnode

;struct fnode* insert_list(struct fnode *temp , struct fnode *linklist) //向檔案中新增路徑

else

node->next = temp ;

}return linklist ;

}void output(struct fnode *head) //列印檔案資訊

; //檔案型別

char *perm[8] = ; //許可權型別

while(temp != null)

printf("%4d ",mystat.st_mode);

int index=((mystat.st_mode >> 12) & 0xf) / 2; //查詢檔案型別

printf("%c",type[index]);

printf("%s",perm[mystat.st_mode >> 6 & 07]); //本人許可權

printf("%s",perm[mystat.st_mode >> 3 & 07]); //組員許可權

printf("%s ",perm[mystat.st_mode >> 0 & 07]); //他人許可權

printf("%4ld ",mystat.st_nlink); //硬連線個數

pw=getpwuid(mystat.st_uid); //通過uid獲取passwd資料

printf("%10s ",pw->pw_name);

group=getgrgid(mystat.st_gid); //通過gid獲取組資料

printf("%10s ",group->gr_name);

printf("%8ld ",mystat.st_size); //檔案大小

char buf[30];

memset(buf,'\0',30) ;

ctime_r(&mystat.st_mtime,buf); //上一次被修改的時間

buf[16] ='\0';

printf("%s ", buf);

printf(" %s\n",temp->name); //檔案相對路徑

temp = temp->next ; }}

int main()

; struct fnode *linklist = null; //初始化鍊錶

struct stat stat_info;

dir *dirp = null;

struct dirent *entp = null;

if(stat(path, &stat_info) == -1) //獲取檔案屬性

dirp = opendir(path); //開啟當前路徑

if(dirp == null)

while(entp = readdir(dirp)) //依次讀取目錄下的檔案

temp->next = null;

memset(temp->name,'\0',name_size); //清除節點資料

memcpy(temp->name,entp->d_name,strlen(entp->d_name)); //賦予新資料

linklist = insert_list(temp,linklist); //加入鍊錶

}closedir(dirp) ;

output(linklist) ;

//free

struct fnode *temp;

temp = linklist;

while(temp != null)

return 0;

}

ls -lai執行結果:

本**執行結果:

本次實驗思路:

通過讀取當前路徑下的所有檔案,將其相對路徑加入鍊錶中,以供後續根據相對路徑查詢檔案相關資訊。

顯示內容有八個字段,即查詢結果包含檔案的八個屬性資訊,

第乙個欄位為檔案索引號,通過st_mode可以查詢到。

第二個欄位為檔案許可權,其中首字元為檔案型別,其後九個字元三個為一組,分別代表本人許可權,組員許可權,他人許可權。可以通過檔案索引號進行查詢。

第三個欄位為硬連線個數,通過st_nlink可以查詢。

第四個欄位為檔案在etc/passwd檔案中對應的使用者資訊。通過getpwuid(stat.st_uid)可以查詢到。

第五個資料為檔案對應的組資訊,通過getgrgid(stat.st_gid)可以查詢到。

第六個為檔案大小st_size反映的正是該資訊。

第七個為檔案上一次被修改的時間,通過st_mtime可以反映該資訊。

第八個為檔案相對路徑,使用鍊錶儲存資訊即可顯示。

從顯示結果上看,很容易發現自己寫的**結果相較於ls執行執行的結果顯得更為無序,本想通過readdir檢視是否有通過檔名有序讀取,但是經查驗發現該想法並不能通過已有函式進行實現,智慧型通過對鍊錶內容進行排序從而實現檔案的有序讀取。

此處列出氣泡排序演算法,其他演算法亦可:

void listsort(node **head)  

for(p = *head; p != null; p = p->next)}}

}

作業系統第四次實驗 檔案系統

姓名 張越 班級 計算1811 學號 201821121006 1.編寫程式 在伺服器上用vim編寫乙個程式 實現linux系統命令ls lai的功能,給出源 關於ls lails l 以長格式顯示目錄下的內容列表。輸出的資訊從左到右依次包括檔名,檔案型別 許可權模式 硬連線數 所有者 組 檔案大小...

作業系統第四次實驗

16281049 王晗煒 計科1601 實驗目的 基礎知識 程序執行時,若其訪問的頁面不在記憶體而需將其調入,但記憶體已無空閒空間時,就需要從記憶體中調出一頁程式或資料,送入磁碟的對換區。選擇調出頁面的演算法就稱為頁面置換演算法。好的頁面置換演算法應有較低的頁面更換頻率,也就是說,應將以後不會再訪問...

作業系統第四次作業

4.2 解 發生模式切換可以不改變正處於執行態的程序狀態,在這種情況下,儲存上下文環境和以後恢復上下文環境只需要很少的開銷,執行緒包含的狀態資訊更少 4.3解 資源所有權和排程執行 4.4.解 例如位址空間,檔案資源,執行特權等。problems 4.2解 因為對於使用者級執行緒來說,乙個程序的執行...