姓名:張越
班級:計算1811
學號:201821121006
1.編寫程式
在伺服器上用vim編寫乙個程式:實現linux系統命令ls -lai
的功能,給出源**。
關於ls-lails -l #以長格式顯示目錄下的內容列表。輸出的資訊從左到右依次包括檔名,檔案型別、許可權模式、硬連線數、所有者、組、檔案大小和檔案的最後修改時間等.實驗源**:ls -a #顯示所有檔案及目錄(ls內定將檔名或目錄名稱為「.」的視為影藏,不會列出)
ls -i #顯示檔案索引節點號(inode number),乙個索引節點代表乙個檔案
#include#include#include#include#include#include#include#include#include#include#includevoid error_printf(const char* );給出執行結果截圖,對於每一列是如何獲取的,結合源**做解釋void list_dir(const char* );
void list_message(const char* , const struct stat*);
void file_type(const struct stat* );
void file_power(const struct stat* );
void file_id(const struct stat* );
void file_mtime(const struct stat* );
void link_printf(const char* );
void error_printf(const char* funname)
void list_dir(const char* pathname)
; // 定義stat函式返回的結構體變數
int ret_stat = lstat(filename, &file_message); // 獲取檔案資訊
if(ret_stat == -1) // stat讀取檔案錯誤則輸出提示資訊
printf("%s error!", filename);
else if(strcmp(filename,".") && strcmp(filename,"..")) // 不輸出當前目錄與上一級目錄
list_message(filename, &file_message);
}}void list_message(const char* filename, const struct stat* file_message)
void file_type(const struct stat* file_message)
void file_power(const struct stat* file_message)
void file_id(const struct stat* file_message)
void file_mtime(const struct stat* file_message)
void link_printf(const char* filename)
int main()
;strcpy(path,"./");
struct stat file_message = {};
int ret_stat = lstat(path, &file_message);
if(ret_stat == -1)
error_printf("stat");
if(s_isdir(file_message.st_mode)) // 判斷是否為目錄
list_dir(path);
else
list_message(path, &file_message);
return 0;
}
執行命令 ls -lai以後的執行結果
分析:
第一字段:為索引號;
printf("%d ",(int)file_message->st_ino);//用於新增索引號第二字段:首字母代表檔案的型別; 「-」開頭的是普通檔案,代表無對應條件。"p"開頭的是管道檔案。"rwx"分別代表具有讀寫執行的許可權等等。
void file_type(const struct stat* file_message)57
printf("%d ", file_message->st_nlink);第四字段:檔案擁有者
struct passwd* pwd;第五字段:擁有檔案的使用者所在的組pwd = getpwuid(file_message->st_uid);
printf("%s ",pwd->pw_name); //列印出檔案擁有的人的名字
struct group* grp;第六字段:以位元組為單位的檔案大小grp = getgrgid(file_message->st_gid);
printf("%s ",grp->gr_name);
printf("%5ld ", file_message->st_size); // 列印檔案大小第七字段:最後修改檔案的時間
struct tm* t = localtime(&file_message->st_mtime);第八字段:檔案名字printf("%2d月 %2d %02d:%02d ", t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min);
printf("%s ", filename);在linux系統中命令 ls-l 跟ls-lai的區別是什麼?
答:第乙個不會顯示影藏檔案,第二個會顯示影藏檔案,並別影藏檔案以點開頭的檔案。
在執行結果中顯示的total的含義是什麼?
答:total的意思是:列表中所有檔案的磁碟空間占用總和,也就是資源占用總和,它的統計單位是kb。
實驗參考鏈結
作業系統第四次實驗報告 檔案系統
include include include include include include include include include include include define name size 20 struct fnode struct fnode insert list stru...
作業系統第四次實驗
16281049 王晗煒 計科1601 實驗目的 基礎知識 程序執行時,若其訪問的頁面不在記憶體而需將其調入,但記憶體已無空閒空間時,就需要從記憶體中調出一頁程式或資料,送入磁碟的對換區。選擇調出頁面的演算法就稱為頁面置換演算法。好的頁面置換演算法應有較低的頁面更換頻率,也就是說,應將以後不會再訪問...
作業系統第四次作業
4.2 解 發生模式切換可以不改變正處於執行態的程序狀態,在這種情況下,儲存上下文環境和以後恢復上下文環境只需要很少的開銷,執行緒包含的狀態資訊更少 4.3解 資源所有權和排程執行 4.4.解 例如位址空間,檔案資源,執行特權等。problems 4.2解 因為對於使用者級執行緒來說,乙個程序的執行...