我們已經會遍歷資料夾,並會用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作業系統...