linux小專案模擬實現ls l用stat

2021-07-31 09:23:04 字數 1511 閱讀 1176

模擬實現ls-l

#include 

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char* argv)

struct stat st;

int ret = stat(argv[1], &st);

if(ret == -1)

// 儲存檔案型別和訪問許可權

char perms[11] = ;

// 判斷檔案型別

switch(st.st_mode & s_ifmt)

// 判斷檔案的訪問許可權

// 檔案所有者

perms[1] = (st.st_mode & s_irusr) ? 'r' : '-';

perms[2] = (st.st_mode & s_iwusr) ? 'w' : '-';

perms[3] = (st.st_mode & s_ixusr) ? 'x' : '-';

// 檔案所屬組

perms[4] = (st.st_mode & s_irgrp) ? 'r' : '-';

perms[5] = (st.st_mode & s_iwgrp) ? 'w' : '-';

perms[6] = (st.st_mode & s_ixgrp) ? 'x' : '-';

// 其他人

perms[7] = (st.st_mode & s_iroth) ? 'r' : '-';

perms[8] = (st.st_mode & s_iwoth) ? 'w' : '-';

perms[9] = (st.st_mode & s_ixoth) ? 'x' : '-';

// 硬鏈結計數

int linknum = st.st_nlink;

// 檔案所有者

char* fileuser = getpwuid(st.st_uid)->pw_name;

// 檔案所屬組

char* filegrp = getgrgid(st.st_gid)->gr_name;

// 檔案大小

int filesize = (int)st.st_size;

// 修改時間

char* time = ctime(&st.st_mtime);

char mtime[512] = ;

strncpy(mtime, time, strlen(time)-1);

char buf[1024];

sprintf(buf, "%s %d %s %s %d %s %s", perms, linknum, fileuser, filegrp, filesize, mtime, argv[1]);

printf("%s\n", buf);

return

0;}

如圖所示:

Linux 訊號 模擬實現sleep

1 產生訊號 產生訊號的3種方式 1 呼叫系統函式 kill raise abort 2 軟體異常行為 3 組合鍵 ctrl c ctrl d ctrl 等 處理訊號的3種方式 1 忽略。2 預設 很多情況下是終止 3 自定義 訊號捕捉 訊號在核心中的表示 1 遞達 執行訊號的處理動作稱為訊號遞達 ...

linux 模擬實現sleep函式

功能 將程序掛起一段時間 函式原型 include unsigned int sleep unsigned int seconds n秒 來舉乙個很簡單的栗子 執行以上 後,輸出結果如下 每隔一秒列印一次,這就是sleep函式的作用。那麼如何自己模擬實現sleep呢?先介紹一些我們會用到的函式 作用...

Linux 簡單實現 ls l 命令

ls l命令 系統效果 列出檔案屬性,許可權,使用者等資訊 簡單實現 include include include include include include include include include struct stat sbuf struct stat sbuf dst struc...