嵌入式學習29(自實現ls l)

2021-08-07 11:05:27 字數 3360 閱讀 2486

我們已經會遍歷資料夾,並會用stat獲得資料夾中個檔案的資訊了,那麼如何將其轉化為,ll命令下我們能很方便識別的內容呢。

首先要了解stat的的成員st_mode,它是乙個6位八進位制數,也就是乙個18位的二進位制數。

(相應位置1代表有相應許可權)

000000 000 000 000 000

檔案型別 檔案訪問許可權控制 所屬者 同組 其他人(許可權)

s_ifmt          0170000     檔案型別的位遮罩

s_ifsock 0140000

socket ("s")

s_iflnk 0120000 符號鏈結(symbolic link) ("l")

s_ifreg 0100000 一般檔案 ("-")

s_ifblk 0060000 區塊裝置(block device) ("b")

s_ifdir 0040000 目錄 ("d")

s_ifchr 0020000 字元裝置(character device) ("c")

s_ififo 0010000 先進先出(fifo) ("p")

s_isuid 0004000 檔案的(set user-id on

execution)位

s_isgid 0002000 檔案的(set group-id on

execution)位

s_isvtx 0001000 檔案的sticky位

s_irwxu 00700 檔案所有者的遮罩值(即所有權限值)

s_irusr 00400 檔案所有者具可讀取許可權

s_iwusr 00200 檔案所有者具可寫入許可權

s_ixusr 00100 檔案所有者具可執行許可權

s_irwxg 00070 使用者組的遮罩值(即所有權限值)

s_irgrp 00040 使用者組具可讀取許可權

s_iwgrp 00020 使用者組具可寫入許可權

s_ixgrp 00010 使用者組具可執行許可權

s_irwxo 00007 其他使用者的遮罩值(即所有權限值)

s_iroth 00004 其他使用者具可讀取許可權

s_iwoth 00002 其他使用者具可寫入許可權

s_ixoth 00001 其他使用者具可執行許可權

摘自《linux c 函式庫參考手冊》```

判斷時,既可以相與判斷,也可以用系統的巨集快速判斷。

另乙個知識點是/etc/passwd ,該檔案是系統的主要檔案之一。該檔案中包含了所有使用者登入名清單;為所有使用者指定了主目錄;在登入時使用的 shell 程式名稱等。該檔案還儲存了使用者口令;給每個使用者提供系統識別號。

/etc/passwd 檔案是乙個純文字檔案,每行採用了相同的格式:name:password:uid:gid:comment:home:shell

struct passwd ;

好了鋪墊了這麼久,我們來上最後的**

哎,標頭檔案不知道怎麼了,無法正常顯示,大佬們自行新增

char* check_rights(mode_t s);

char file_type(mode_t s);

void main(int argc,char** argv)

dir* dirp=opendir(「./」);//資料夾指標

if(null==dirp)

struct dirent* the=null;//檔案指標,含檔案的上下檔案,檔名等資訊

struct stat sta;

struct passwd* pw;//使用者資訊指標

struct group* gr;

char buf[10];

struct tm* t;//例項化tm結構指標

while(the=readdir(dirp))//每讀取成功一次,讀寫指標自動下移遍歷

}closedir(dirp);}

char file_type(mode_t s)

return c;

} char* check_rights(mode_t s)

{ static char buf[10];

buf[9]=』\0』;

if(s & 0000001)//按位與判斷是否有相應許可權,按位或給與相應許可權

buf[8]=』x』;

else

buf[8]=』-『;

if(s & 0000002)

buf[7]=』w』;

else

buf[7]=』-『;

if(s & 0000004)

buf[6]=』r』;

else

buf[6]=』-『;

if(s & 0000001<<3)//按位與判斷是否有相應許可權,按位或給與相應許可權

buf[5]='x';

else

buf[5]='-';

if(s & 0000002<<3)

buf[4]='w';

else

buf[4]='-';

if(s & 0000004<<3)

buf[3]='r';

else

buf[3]='-';

if(s & 0000001<<6)//按位與判斷是否有相應許可權,按位或給與相應許可權

buf[2]='x';

else

buf[2]='-';

if(s & 0000002<<6)

buf[1]='w';

else

buf[1]='-';

if(s & 0000004<<6)

buf[0]='r';

else

buf[0]='-';

return buf;

嵌入式學習

1 c 語言 第二版譚浩強。2 資料結構 c語言版。3 實用 c 程式設計 4 學習51 微控制器,加深對中斷的理解。5 學習 arm微控制器。1 細讀 arm微控制器基礎與實戰 周立功編寫。2 細讀相關晶元的原版英文文件。如 arm920te.pdf s3c2410 1.2.pdf。6 學習uco...

嵌入式學習

一 學什麼?嵌入式linux 所涵蓋的知識面很廣,需要按步驟 不間斷的努力深入學習,才能有所成就。學習嵌入式 linux 需要學習如下 5大知識 按照學習步驟 1.嵌入式處理器 arm 與邏輯程式開發 2.linux系統管理 3.linux應用程式開發 4.linux驅動程式開發 5.linux核心...

嵌入式學習

嵌入式系統開發學習如何起步 如何深入?學習步驟如下 1 linux 基礎 安裝linux作業系統 linux檔案系統 linux常用命令 linux啟動過程詳解 熟悉linux服務能夠獨立安裝linux作業系統 能夠熟練使用linux系統的基本命令 認識linux系統的常用服務安裝linux作業系統...