

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 Linuxcc+下ls命令的實現(xiàn)(超詳細)今天我們要討論的是bash shell的個重要命令,就是“l(fā)s”命令。Linux 中的 ls 命令是每個 Linux 戶都應(yīng)該知道的最重要的命令之。如果您是使命令的初學(xué)者,ls 可能是您應(yīng)該嘗試學(xué)習(xí)的第個命令。ls 是 list 的縮寫,于列出當(dāng)前作錄或其他錄(如果指定)中的件。ls命令為什么這么重要ls 如此重要的原因在于它允許查看錄中的件。將經(jīng)常使它來列出錄內(nèi)容。 ls 不是個復(fù)雜的命令,實現(xiàn)起來也很容易,但它確實包含許多不同的選項,可于列出包含附加信息的件。在這過程中,你可能會發(fā)現(xiàn)其中些選項常有,即使 ls 本總是以列出內(nèi)容。掌握 ls 命令將
2、使你更有效地列出錄內(nèi)容和查找件。它也可以在 Bash 腳本中使,以幫助其他具操作件。最后,我們每天在使linux的時候經(jīng)常使 ls 命令,但是你了解ls的實現(xiàn)嗎?快速了解ls命令ls 命令列出錄中包含的件和錄。 您可以與 ls 起使的選項主要是為了列出附加信息,或者以不同的式格式化輸出。ls -l顯件或錄、修改期和時間、件或件夾名稱和件所有者及其權(quán)限。其他選項這就不列舉出來了,感興趣的可以通過man冊了解。怎么實現(xiàn)ls命令?我們已經(jīng)通過在命令上輸ls命令,列出錄中包含的件和錄。-a 選項還將列出隱藏件(名稱以 . 開頭的件)。 除您在根錄中,否則它還會列出 . (當(dāng)前作錄)和 (向上個錄)作為
3、件。那么我們?nèi)绾巫x取錄、件信息呢?#include struct dirent *readdir(DIR *dirp); 最多常見的readdir使式:1234567891011121314151617181920212223242526272829while( (ptr = readdir(dir)!=NULL)closedir(dir);編譯運:上輸出是未按照件名排序。 readdir函數(shù)按照在磁盤的索引順序,d_off來排序,若是須要按照件名d_name,須要遍歷后將件名保存,再次排序。scandir 的使1234int scandir(const char *dir,struct di
4、rent *namelist,int (*filter)(const void *b),int ( * compare )( const struct dirent *, const struct dirent * ) );int alphasort(const void *a, const void *b);int versionsort(const void *a, const void *b);函數(shù)scandir掃描dir錄下以及dir錄下滿filter過濾模式的件,返回的結(jié)果是compare函數(shù)經(jīng)過排序的,并保存在 namelist中。注意namelist是通過malloc動態(tài)分配內(nèi)存
5、的,所以在使時要注意釋放內(nèi)存。alphasort和versionsort 是使到的兩種排序的函數(shù)。常見scandir的使: 1234567891011121314151617181920212223242526272829303132333435cout scandir return n d_ino,namelistindex-d_off,namelistindex-d_name);free(namelistindex);index+;編譯運:scandir函數(shù)中能夠直接調(diào)排序函數(shù),將遍歷到的件名按照順序保存在隊列中。 下我們來看看怎么實現(xiàn)ls -l ;如何實現(xiàn) ls -l在 Linux 中與
6、 ls 命令起使的最常選項之是 -l。 此選項以更長的格式列出錄內(nèi)容。上輸出向我們顯錄中所有件的件權(quán)限、指向該件的符號鏈接數(shù)量、每個件的所有者和組、上次修改時間等。下是定義的7個字段。1234567char * getuser (struct stat filestat);char * getgroup(struct stat filestat);int getsize (struct stat filestat);char * getdate (char * , struct stat filestat);char * getname (char * , char * , char , in
7、t);獲得件信息stat 能獲取與件系統(tǒng)及件相關(guān)的許多信息,具體途見stat的功能選項。這些信息包括inode、atime、ctime、mtime、件(系統(tǒng))類型、權(quán)限、塊、符號連接等。 下我來實現(xiàn) ls -l,具體代碼如下:1234567891011121314151617181920212223242526272829303132333435363738394041424344using namespace std ;DIR *dir;*tm;datestring 256;char modestr11;dir = opendir(FILE_NAME);if(NULL = dir)cout
8、opendir is NULL pw_name);elseprintf( %-8d, statbuf.st_uid);/* 如果使getgrgid() 找到組名,則打印出組名。*/if (grp = getgrgid(statbuf.st_gid) != NULL)printf( %-8.8s, grp-gr_name);elseprintf( %-8d, statbuf.st_gid);char * getperm(char * perm , struct stat fileStat) if ( S_ISLNK(fileStat.st_mode) ) perm0 = l;else if (
9、S_ISDIR(fileStat.st_mode) ) perm0 = d;else if ( S_ISCHR(fileStat.st_mode) ) perm0 = c;else if ( S_ISSOCK(fileStat.st_mode) ) perm0 = s;else if ( S_ISFIFO(fileStat.st_mode) ) perm0 = p;else perm0 = -;if ( fileStat.st_mode & S_ISUID ) 1091101111121131141151161171181191201211221231241251261271281291301
10、31132133134135136137138139140141142if ( fileStat.st_mode & S_ISUID ) else if ( fileStat.st_mode & S_IXUSR ) 編譯運:權(quán)限針對件:r-查看,w-修改,x-執(zhí)針對件夾:r-列出件夾下的所有件和件夾,w-在錄中創(chuàng)建和刪除,x-進錄權(quán)限數(shù)字說明:權(quán)限字母組合轉(zhuǎn)換為進制1,0組合,有字母的位1表,-的位0表,然后轉(zhuǎn)換為進制數(shù)字。如:rwx組合對應(yīng)的進制為 111,轉(zhuǎn)換為進制7rw-組合對應(yīng)的進制為 110,轉(zhuǎn)換為進制6r-x組合對應(yīng)的進制為 101,轉(zhuǎn)換為進制5 在struct stat中,件所有
11、者都是以ID形式存在的,代碼中輸出戶名和組名。主要使了該函數(shù):12char * getuser(struct stat fileStat)3struct passwd *pass = getpwuid(fileStat.st_uid);4567char * getgroup(struct stat fileStat)89struct group *pass = getgrgid(fileStat.st_gid);1011return pass-gr_name;總的來說,實現(xiàn)“l(fā)s -l”功能所涉及的特殊結(jié)構(gòu)體較多,基礎(chǔ)知識考察較多,需要注意細節(jié)。邏輯結(jié)構(gòu)上算是很簡單,沒有什么需要特別留意的地。
12、ls命令具體選項實現(xiàn)使 -t 選項按修改時間對件進排序。 這會將最近編輯的件帶到輸出的頂部,使它們更容易找到。 12int main(int argc , char * argv) 3456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354opt-flag_S = 0;break;case R:opt-flag_R = 1;break;case ?:break;default:printf (? getopt returned character code 0%o ?n , c);if (optind argc) arg = (char *) calloc ( (argc - optind) , sizeof(char *) );count_arg = 0;while (optind argc) argcount_arg+ = argv
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 預(yù)制菜在2025年餐飲業(yè)環(huán)保政策下的機遇與挑戰(zhàn)報告
- 保險承保題目及答案
- 安全職稱考試題庫及答案
- 康復(fù)醫(yī)療器械市場創(chuàng)新產(chǎn)品應(yīng)用前景預(yù)測:2025年需求分析報告
- 安全生產(chǎn)禁令試題及答案
- 培訓(xùn)課件有沒有版權(quán)
- 2025年成人教育終身學(xué)習(xí)平臺運營效率與市場占有率研究報告
- 個人養(yǎng)老金制度2025年對能源行業(yè)投資的影響與機遇分析報告
- 智慧交通系統(tǒng)2025年交通流量預(yù)測技術(shù)應(yīng)用與智能交通設(shè)施報告001
- 胖東來管理培訓(xùn)課件
- 《動物保定技術(shù)》課件
- 北京市朝陽區(qū)2023-2024學(xué)年四年級下學(xué)期語文期末考試卷(含答案)
- 上樣合作協(xié)議合同協(xié)議
- 兒科系列常見病中藥臨床試驗設(shè)計與評價技術(shù)指南急性咽炎和扁桃體炎
- 公司2025慶七一活動方案七一活動方案2025
- 醫(yī)療質(zhì)量管理工具培訓(xùn)
- 留學(xué)機構(gòu)合作協(xié)議書范本
- 太極拳教學(xué)合同協(xié)議
- 2024年新課標(biāo)I卷CD篇閱讀解析 公開課課件-2025屆高三英語一輪復(fù)習(xí)
- 2024慢性鼻竇炎診斷和治療指南解讀課件
- 大國工匠精神課件
評論
0/150
提交評論