1. 程式人生 > >JAVA File類 分析(三)

JAVA File類 分析(三)

前面兩篇與大家一起研究了unix下的檔案系統,本篇將和大家一起分析 檔案的屬性和目錄。

ok,廢話不說,先來段程式碼

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
void do_ls(char[]);

	void main(int ac,char *av[]){
		if(ac==1)
			do_ls(".");
		else{
			while(--ac){
				printf("%s:\n",*++av);
				do_ls(*av);
			}
		}
	}
	void do_ls(char dirname[]){
		DIR *dir_ptr;
		struct dirent *direntp;
		if((dir_ptr=opendir(dirname))==NULL)
			fprintf(stderr,"ls1:connot open %s",dirname);
		else{
			while((direntp=readdir(dir_ptr))!=NULL)
				printf("%s\n",direntp->d_name);
			closedir(dir_ptr);
		}
	}


這是一個ls 的簡單實現,ls 的演算法如下

main()

    opendir

    while(readdir)  print filename

    closedir


上圖是編譯和執行後的結果圖片

上圖是linux 系統中shell的ls

大家可以看到,自己寫的ls把根目錄和上級目前也打印出來了,並且不能帶引數。程式碼上完了,咱們就開始分析unxi下的檔案的屬性和目錄

磁碟上的檔案和目錄組成一顆目錄樹,每個節點都是目錄或檔案,在unix中每個檔案都位於某個目錄下

1、什麼是目錄?

目錄是一種特殊的檔案,它的內容是檔案和目錄的名字。 目錄檔案的特點就是永遠都不會空,而普通檔案可以為空。那麼目錄檔案不為空,裡面最少要儲存什麼呢?對了,那就是當前目錄和上級目錄。有同學可能要問了,那跟目錄,沒有上級目錄,他是怎麼儲存的?那咱們就看看唄。 使用 cd  / 切換到根目錄 咱們ll  -i 一下 ,把i-節點打印出來,目錄也是檔案,而檔案就必須有i-節點,咱們看看截圖


大家應該很清晰的看到根節點下的當前目錄和上級目錄都指向了同一個節點號為2 的I-節點,這是不是也告訴我們 一個i-節點 可以同時對映成不同的檔名。目錄先分析到這裡

2、檔案有哪些種,都有哪些屬性?

廢話不說,還是先上程式碼

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int ac,char *av[]){
	struct stat info;
	if(ac>1){
		if(stat(av[1],&info)!=-1){
			show_info(av[1],&info);
		}
	}
}
void show_info(char *filename,struct stat *buf){
	printf("  mode  : %o\n",buf->st_mode);
	printf("  links : %d\n",buf->st_nlink);
	printf("  user  : %d\n",buf->st_uid);
	printf("  group : %d\n",buf->st_gid);
	printf("  size  : %d\n",buf->st_size);
	printf("modtime : %d\n",buf->st_mtime);
	printf(" name   : %s\n",filename);
}

編譯執行如下圖,程式設計師只看error 不看waring,哈哈

咱們在 ll 一下


咱們自己寫的程式與系統提供的ll 區別只是顯示格式不同,執行時是root 所以 user 和group 都是 0.size 是514 。 那麼咱們重點說一下這個mode,100644 ,讀是4寫是2可執行時1, 也就是 644 與 rw-r--r-- 對應上,,那麼前面的100 是個什麼東西啊?

其實 mode 是一個16位的二進位制數,檔案型別和許可權被編碼在這個數中 後幾位,每位對應如下圖

其中suid,用於修改自己密碼的許可權;sgid用於所屬組訪問的許可權,且suid也被設定;sticky,對於檔案和目錄用途不同,,對檔案而言,是告訴核心,把他放入swap空間,對於目錄檔案,是用於管理臨時檔案,誰有許可權建立和刪除,sticky位目錄裡 的檔案只能有建立者刪除。通過 ls -l  passwd 命令,它的許可權是-rwsr -xr-x

最後說一下檔案的型別:(一共四位二進位制,也就是最多有16種檔案型別)

常見的型別如下:

1、普通檔案,2、目錄檔案,3、裝置檔案,4、socket檔案,5、符號連結檔案,6、命名管道檔案(named pipe)等

至此,還是老話unix檔案系統內容很多,裝置檔案,socket檔案等都沒有介紹,每個檔案型別,都有很多內容,有興趣的同學,自行學習。unix檔案系統簡略的介紹到這裡。

下篇終於開始分析JAVA的FIle 類了。

相關推薦

JAVA File 分析

前面兩篇與大家一起研究了unix下的檔案系統,本篇將和大家一起分析 檔案的屬性和目錄。 ok,廢話不說,先來段程式碼 #include <stdio.h> #include <sys/types.h> #include <dirent.h&g

JAVA File 分析

本章開始介紹UNIX檔案系統。 檔案系統是如何管理檔案的呢?那咱們要先檔案的儲存介質開始--磁碟 磁碟是計算機系統的一個硬體裝置,檔案系統為了能夠管理磁碟,對其進行了三層抽象(本文所有內容均指UNIX檔案系統,windows檔案系統有興趣的同學自行研究!~) 第一層抽象:將

分析 層次聚及matlab程式

一、層次聚類介紹 1.1 簡介 層次聚類,主要是對給定的待聚類的資料集進行層次化分解。主要分為兩大類: 1.從下到上的凝聚聚類 2.從上到下的分裂聚類 其他演算法大部分是對樣本之間距離度量或者類間凝聚/分裂依據進行改進。 1.2從下到上的凝聚演算法 從下到上的凝聚演算法能夠讓人們較為直觀的觀

分析 K中心點演算法k-mediods

K 中心點演算法( K-medoids ) 前面介紹了 k-means 演算法,並列舉了該演算法的缺點。而 K 中心點演算法( K-medoids )正好能解決 k-means 演算法中的 “噪聲”敏感這個問題。 如何解決的呢? 首先,我們得介紹下 k-means 演算法為什麼會對“噪聲”敏感。還記

Java IO原始碼分析——PipedOutputStream和PipedInputStream

# 簡介 PipedOutputStream和PipedInputStream主要用於執行緒之間的通訊 。二者必須配合使用,也就是一段寫入,另一端接收。本質上也是一箇中間快取區,講資料快取在PipedInputStream的陣列當中,等待PipedOutputStream的讀取。 PipedInputStre

Java容器原始碼-Vector的最全的原始碼分析

    (16) public synchronized void removeElementAt(int index) 原始碼解釋: 獲取到index位置後有多少個元素,並將index位置後面的元素複製到index位置前的後面,再將index位置置空。複製

Java並發集合-ConcurrentHashMap分析和使用

hashmap 集合 int view blog article hub java並發 details 1 http://ifeve.com/hashmap-concurrenthashmap-%E7%9B%B8%E4%BF%A1%E7%9C%8B%E5%AE%8C%E8%

java併發程式設計一一執行緒池原理分析

合理的設定執行緒池的大小 接著上一篇探討執行緒留下的尾巴。如果合理的設定執行緒池的大小。 要想合理的配置執行緒池的大小、首先得分析任務的特性,可以從以下幾個角度分析: 1、任務的性質:CPU密集型任務、IO密集型任務、混合型任務等; 2、任務的優先順序:高、中、低; 3、任務的執行時

Java多執行緒之AQSAbstractQueuedSynchronizer 實現原理和原始碼分析

章節概覽、 1、回顧 上一章節,我們分析了ReentrantLock的原始碼: 2、AQS 佇列同步器概述 本章節我們深入分析下AQS(AbstractQueuedSynchronizer)佇列同步器原始碼,AQS是用來構建鎖或者其他同步元件的基礎框架。

反射包 java.lang.reflect⑦ 之 Java 中 Proxy 動態代理 探祕

這個系列好久沒有續作了,你以為完了,錯了。這個動態代理有說不完的知識點,我也是在不斷的學習中才瞭解得到更多的知識。但無可否認的一點是它需更多其他的知識的支援,比如設計模式,設計思想。工作越久越覺得設計模式這個東西的重要性。  其實動態代理的前兩個例子只是簡單的列出了它的一個

Java基礎——面向物件抽象

一、概述 1.抽象:籠統,就是比較模糊,看不懂!或者說不具體。 //抽象類 abstract class Demo{ //抽象方法 abstract void show(); } 2.特點: 方法只有宣告沒有實現時,該方法就是抽象方法,需要被ab

spring4.2.9 java專案環境下ioc原始碼分析——refresh之obtainFreshBeanFactory方法@1準備工作與載入Resource

obtainFreshBeanFactory方法從字面的意思看獲取新的Bean工廠,實際上這是一個過程,一個載入Xml資源並解析,根據解析結果組裝BeanDefinitions,然後初始化BeanFactory的過程。在載入Xml檔案之前,spring還做了一些其他的工作,比

Java 8 新特性新的日期時間

老日期類 一說到在Java中處理日期和時間,我們首先想到的肯定是java.util.Date類。確實,由於很多教材和文獻都比較老,所以大多數人學習Java的時候使用的都是這個類。而且這個類確實在整個Java生態中擔任過重要的作用。 但是隨著時間推移,這個類已

死磕 java集合之TreeMap源碼分析- 內含紅黑樹分析全過程

根節點 eem right .com ast size 一個 table else 歡迎關註我的公眾號“彤哥讀源碼”,查看更多源碼系列文章, 與彤哥一起暢遊源碼的海洋。 刪除元素 刪除元素本身比較簡單,就是采用二叉樹的刪除規則。 (1)如果刪除的位置有兩個葉子節點,則從其

死磕 java集合之ConcurrentHashMap源碼分析

ret tree 而是 答案 img equal java集合 自旋鎖 數組 本章接著上兩章,鏈接直達: 死磕 java集合之ConcurrentHashMap源碼分析(一) 死磕 java集合之ConcurrentHashMap源碼分析(二) 刪除元素 刪除元素跟添加元

Java安全之Commons Collections1分析

# Java安全之Commons Collections1分析(三) ## 0x00 前言 繼續來分析cc鏈,用了前面幾篇文章來鋪墊了一些知識。在上篇文章裡,其實是硬看程式碼,並沒有去除錯。因為一直找不到JDK的低版本。 全靠腦子去記傳參內容嘗試理解。後面的其實就簡單多了,在上篇文章的基礎上再去做

模塊分析

1.7 space 後置 狀態 你在 處理 節點 要點 不同 做設計很重要一點就是要考慮匹配設計,就是你的設計一定要有一個意識,就是要回歸原始狀態;也可以稱之為閉環誰急,而且是小地方的閉環,以及異常情況的閉環;比如傳輸你在一個地方加密,解密一般都會考慮到;但是如果是壓縮,邏

java面向對象理論

ont def 三種 類的繼承 設置 一定的 命名 類型 以及 面向對象的基本特性 封裝   封裝性就是盡可能的隱藏對象內部細節,對外形成一道邊界,只保留有限的接口和方法與外界進行交互。封裝的原則是使對象以外的部分不能隨意的訪問和操作對象的內部屬性,從而避免了外界對對象內部

java高級工程師

基礎 自信心 分布式緩存 基於 nlog 知識點 個人理解 數據 有時 一、獨白 之前也面試別人,現在輪到自己找工作,怎麽說呢,每個面試官的看法不一樣,面試的方式就不一樣,比如我面試別人我喜歡問項目中他用到了那些,然後針對用到的技術去問一些問題,或者說對於某些場景

Scala入門到精通——第二十四節 高級

func double tor 結構體 入門到精通 strac 命令 person 字節碼 作者:擺擺少年夢 視頻地址:http://blog.csdn.net/wsscy2004/article/details/38440247 本節主要內容