#include#include#include#include#include#include#include#include#include#include#include #define name_size 20struct 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執行結果:
![](https://pic.w3help.cc/746/8d86fa074f82a27b7b8f46e7c885e.jpeg)
本**執行結果:
本次實驗思路:
通過讀取當前路徑下的所有檔案,將其相對路徑加入鍊錶中,以供後續根據相對路徑查詢檔案相關資訊。
顯示內容有八個字段,即查詢結果包含檔案的八個屬性資訊,
第乙個欄位為檔案索引號,通過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解 因為對於使用者級執行緒來說,乙個程序的執行...