1. 程式人生 > >linux 下 如何自己寫 ls 命令

linux 下 如何自己寫 ls 命令

有過linux 基礎 都知道 ls 命令的作用


下面給出實現程式碼

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <dirent.h>
int  fun1(char *dir,char *filename)
{
	struct stat buf;
	char out[100];
	if(stat(dir,&buf)<0)
	{
		perror("stat");
		return (-1);

	}

	switch(buf.st_mode & S_IFMT)
	{
	case S_IFREG:	
		printf("-");
		break;
	case S_IFDIR:	
		printf("d");
		break;
	case S_IFCHR:	
		printf("c");
		break;
	case S_IFBLK:	
		printf("b");
		break;
	case S_IFIFO:	
		printf("p");
		break;
	case S_IFLNK:	
		printf("l");
		break;
	case S_IFSOCK:	
		printf("s");
		break;
	}

	int n;
	for(n=8;n>=0;n--)
	{
		if(buf.st_mode&(1<<n))
		{
			switch(n%3)
			{
			case 2:
				printf("r");
				break;
			case 1:
				printf("w");
				break;
			case 0:
				printf("x");
					break;
			default:
				break;

			}
		}
		else
		{
			printf("-");
		}
	}
	
	
	printf(" %d",buf.st_nlink);
	
	struct passwd *pw;
	pw = getpwuid(buf.st_uid);
	printf(" %s",pw->pw_name);

	struct group *gr;
	gr = getgrgid(buf.st_gid);
	printf(" %s",gr->gr_name);

	printf(" %ld",buf.st_size);
	

	struct tm *t;
	t = localtime(&buf.st_atime);
	printf(" %d-%d-%d %d:%d",t->tm_year+1900,
							t->tm_mon+1,
							t->tm_mday,
							t->tm_hour,
							t->tm_min);
   printf(" %s ",filename);	

	
	   
	if(S_ISLNK(buf.st_mode))
	{
		printf(" -> ");
		if(readlink(filename,out,100)==-1)
		{

		}
		printf("%s",out);

	}
	printf("\n");
	return 0;
}


int main(int argc ,char **argv)
{
	char w[100];
	memset(w,0,100);

	if(argc<2)
		strcpy(w,"./");

	else
		strcpy(w,argv[1]);
	struct stat buf;
	char name[100];
	if(stat(w,&buf)<0)
	{
		fprintf(stderr,"stat error:%s\n",strerror(errno));
		return -1;
	}
	
	if(S_ISDIR(buf.st_mode))
	{
		DIR *dir;
		dir = opendir(w);
		struct dirent *pdr;
		while ((pdr = readdir(dir))!=NULL)
		{
			if(pdr->d_name[0]=='.')
			{
			}
			else
			{
				printf(" dir:%s \n",pdr->d_name);
				memset(name,0,100);
				strcpy(name,w);
			//	strcat(name,"/");
				strcat(name,pdr->d_name);
				fun1(name,pdr->d_name);
			}
			
		}
	}
	else
	{
		fun1(w,w);
	}
	return 0;
}


相關推薦

linux 如何自己 ls 命令

有過linux 基礎 都知道 ls 命令的作用 下面給出實現程式碼 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio

linux自己個軟體

一、首先是建立三個檔案 test_1.c test_2.c test_3.c test_1.c     #include <stdio.h>     #include <stdlib.h>  &n

linux 忽然發現ls,vi命令沒法使用怎麼辦

<div class="markdown_views"> <p>1,在命令列中輸入 <br> e

Linux安裝軟件命令詳解

代碼包 相關信息 make bin 一個 軟件包 輸入 -i bin文件 Linux下軟件安裝方法總結:一、rpm包安裝方式步驟:1、找到相應的軟件包,比如soft.version.rpm,下載到本機某個目錄;2、打開一個終端,su -成root用戶;3、cd soft.v

linux mii-tool ethtool 命令簡單的使用

linux下mii-tool ethtool 命令簡單的使用################################################################通過命令查看linux網卡的物理信息,狀態:[[email protected]/* */ ~]# mii-

linux一些常用操作命令

linux 防火墻 端口 1、兩個服務器ssh免授權:ssh-keygen -t rsa 一直回車至結束ssh-copy-id -i /root/.ssh/id_rsa.pub 遠程ip 然後回車 輸入遠程ip密碼搞定,以後訪問就不用驗證密碼了2、壓縮和解壓縮命令: .tar

linux各種解壓命令

好用 ast 網絡 所有 備份 pm2 文件壓縮 註意 詳細 .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(註:tar是打包,不是壓縮!)———————————————.gz解壓1:gunzip Fi

004-Linux操作目錄常用命令(mkdir)

刪除目錄 note 當前 目錄 name ges 否則 技術分享 mdi 1,mkdir 創建目錄 當前目錄下創建一個目錄 mkdir dir 創建含有子目錄的方式 mkdir -p dir/t11/t1

002-Linux防火墻相關命令操作

style 默認 ice 查看 開機啟動 操作 run ted spa   linux的各個版本或同一個版本間不同版本號關於防火墻命令也會有不一樣的。針對這些命令整理如下,方便自己或有需要的朋友查閱。 centOS 6.5關閉防火墻步驟 關閉命令: se

Linux的查找命令

指定權限 字母 name roc 必須 ctime oca 可靠 Owner Linux下的查找命令有很多,常用的有grep、which、whereis、locate、find。使用linux系統難免會忘記文件所在的位置,小編就是如此。所以我們在文件系統上常常

linuxlast與lastb命令詳解

bubuko 使用 文件的 clas ip地址 tty 遠程 默認 讀取 在linux系統中,last與lastb命令用來列出目前與過去登錄系統的用戶相關信息。指令英文原義: last, lastb - show listing of last logged in user

常用linux網絡相關命令

常用命令說明:以下命令為Linux中常用的網絡命令,適用於大多數Linux/Unix系統,少數系統可能會有差異。歡迎大家根據自己日常工作中的使用情況進行補充。 設置網絡參數的命令:手動/自動配置IP參數與啟動/關閉網絡接口:ifconfig、ifup、ifdown修改路由:route網絡參數綜合命令:ip無線

Linux 常用的Shell 命令

input int AR sel https 如果 del grep option 英文原文鏈接:https://www.lopezferrando.com/30-interesting-shell-commands/ 1. 監控命令(每2秒運行一次) watch

解決Linux無法使用sudo命令問題

sudo問題描述 使用普通用戶登錄後在終端中執行sudo命令時提示以下錯誤: We trust you have received the usual lecture from the local SystemAdministrator. It usually boils down to these thr

Linux 強大的查詢命令find

一、find 命令的格式 find pathname -options [ -print -exec -ok ... ] 引數詳解: --- pathname :是find命令所查詢的目錄路徑。例如用符號.來表示當前目錄,用/來表示系統根目錄。 --- -print :表示find命令將匹配的檔案輸出到標準輸

linux 操作mysql 常用命令

  linux 下 操作mysql 常用命令   命令 說明 mysql -u user_name -p 登入 ,輸完命令按回車,再輸入密碼(輸密碼時游標不跳動,輸完直接回車即可) show databases; 檢視所有資料庫(注意加上分號“;” 結束) creat

如何理解Linux,使用top命令看到記憶體佔用情況

linux 下使用top命令之後看到記憶體佔用情況如下: Mem: 32849260k total, 32630656k used, 218604k free, 445512k buffers Swap: 0k total, 0k used,

linux壓縮解壓縮命令

linux壓縮解壓縮命令 tar基本命令 tar解壓其他格式的壓縮包 詳細命令請參考 https://www.jb51.net/LINUXjishu/43356.html. tar基本命令 -c: 建立壓縮檔案 -x:解壓

Linux常用的vim命令總結

vim的基本使用 生存 [i]和[esc]進行模式的切換。 上[k]下[j]左[h]右[l]。 寫儲存[:wq!]、不寫儲存[:q!]。 取消操作[u]。 基本功 前[a]後[i]插、行首[I或0]、行尾[A或$]。 向上新建一行[O]向下新建一行[o]。 連線下面一行來

linux的一些特殊命令

以常規顯示方式檢視當前目錄下所有檔案及目錄的大小 du -sh *       兩個伺服器之間的資料拷貝 scp -P portnum [email protected]:/dir/filename  /dir/filename