編寫自己的ls程式

來源:互聯網
上載者:User

本程式用來仿照linux中的ls -l命令來實現的,主要運用的函數有opendir,readdir, lstat等。代碼如下:

#include <iostream>#include <vector>#include <cstdlib>#include <dirent.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <cstring>#include <algorithm>using namespace std;void getFileAndDir(vector<string> &, char *);void displayFileDistribute(vector<string> &);int main(int argc ,char *argv[]){vector<string> file;if(argc != 2){cerr << "usage: ls /XXX" << endl;exit(1);}getFileAndDir(file, argv[1]);displayFileDistribute(file);/*vector<string>::iterator it = file.begin();for(; it != file.end(); ++it){//cout << *it << endl;}*/exit(0);}void getFileAndDir(vector<string> &file, char *dirName){DIR *dir;struct dirent *drt;dir = opendir(dirName);if(dir == NULL){cerr << "Cann't opendir " << dirName << endl;exit(1);}while((drt = readdir(dir)) != NULL){//cout << drt->d_name << endl;if(!strcmp(drt->d_name, ".") || !strcmp(drt->d_name, "..")){continue;}file.push_back(drt->d_name);}closedir(dir);}void displayFileDistribute(vector<string> &file){vector<string>::iterator it = file.begin();struct stat filestat;string perm[] = {"---", "--x", "-w-", "-wx", "r--", "r-x", "rw-", "rwx"};cout << "總計 " << file.size() << endl;sort(file.begin(), file.end());for(; it != file.end(); ++it){if(lstat((*it).c_str(), &filestat) == -1){cerr << "stat filed!" << endl;continue;}cout << filestat.st_ino << " "; //inodeif(S_ISREG(filestat.st_mode))cout << "-";else if(S_ISDIR(filestat.st_mode))cout << "d";else if(S_ISCHR(filestat.st_mode))cout << "c";else if(S_ISBLK(filestat.st_mode))cout << "b";else if(S_ISFIFO(filestat.st_mode))cout << "p";else if(S_ISLNK(filestat.st_mode))cout << "l";else if(S_ISSOCK(filestat.st_mode))cout << "s";elsecout << "X";//get permint i = 3;unsigned int mask = 0700;while(i > 0){cout << perm[(filestat.st_mode & mask) >> (i - 1) * 3];--i;mask >>= 3;}cout << " " << filestat.st_uid << " ";cout << filestat.st_gid << " ";string str = ctime(&filestat.st_atime); cout << str.substr(0, str.length() - 9) << " ";cout << *it << endl;}}

編譯運行代碼:程式需要接收一個目錄參數比如  ./ls /home/wyp

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.