前面两篇与大家一起研究了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,用于改动自己password的权限;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类 分析(三)的更多相关文章

  1. JAVA File类 分析(二)

    本章開始介绍UNIX文件系统. 文件系统是怎样管理文件的呢?那咱们要先文件的存储介质開始--磁盘 磁盘是计算机系统的一个硬件设备,文件系统为了可以管理磁盘.对其进行了三层抽象(本文全部内容均指UNIX ...

  2. Java File 类的使用方法详解

    Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对Java File文件操作类进行详细地分析,并将File类中的常用方法进行简单介绍,有需要的Java开发者可以看 ...

  3. Java File 类的使用方法详解(转)

    转自:http://www.codeceo.com/article/java-file-class.html Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对J ...

  4. Java File类总结和FileUtils类

    Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...

  5. Java File类 mkdir 不能创建多层目录

    File f = new File("/home/jp/Upload"); if ((!f.exists()) || (!f.isDirectory())) {boolean re ...

  6. Java File类基础解析 1

    Java File类基础解析 1 File类的构造方法 public File(String pathname) :通过给定的路径名字符转换为抽象路径名来创建新的File实例 String path ...

  7. Java——File类概述

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  8. Java——File类成员方法

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  9. File类的三种构造方法

    package cn.zmh.File; import java.io.File; /* * * File类的构造方法 三种重载形式 * * */ public class FileDemo1 { p ...

随机推荐

  1. POJ1679(次小生成树)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24201   Accepted: 8596 D ...

  2. 《Java web 开发实战经典》读书笔记

    去年年末,也就是大四上学期快要结束的时候,当时保研的事情确定了下来,终于有了一些空闲的时间可以学点实用的技术. 之前做数据库课程设计的时候,也接触过java web的知识,当时做了一个卖二手书籍的网站 ...

  3. react-native 环境配置及hello world

    一.前言 最近手头的工作繁多,有研究性的项目和系统研发,正好遇到同事离职,接手了框架的UI组件,不仅需要维护和填坑,还需要开发新的功能组件.因为身在H5-Hybird的框架部门,最近团队开始尝试使用R ...

  4. Ubuntu亮度无法调节或调节无法保存的问题

    装了搜狗输入法之后,系统设置里面的很多软件都没有了.以前屏幕太亮在电源里面可以调节,现在不行了.没办法,只能找其他的办法了. 在网上查了很多资料,经自己的实验,找到了一个成功的方法. 首先进入 /sy ...

  5. cookie 和 session 基本使用 以及 封装

    Cookie: 是一小段文本信息,用户请求页面的时候,在浏览器和服务器之间传递.用户每次访问的时候都会记录cookie,cookie里可以包含用户信息,浏览的历史记录等等:Cookie是由服务器端生成 ...

  6. .NET一个线程更新另一个线程的UI(两种实现方法及若干简化)

    Winform中的控件是绑定到特定的线程的(一般是主线程),这意味着从另一个线程更新主线程的控件不能直接调用该控件的成员. 控件绑定到特定的线程这个概念如下: 为了从另一个线程更新主线程的Window ...

  7. RFC端口号定义

    RFC关于计算机端口号定义 http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers. ...

  8. 求1+2+3+...+n的值,要求不能使用乘除法,for、while、if、else、switch、case、等关键字及条件判断语句(JAVA)

    采用递归和三目表达式注意红色字体一定不能写成n-- 1 package com.hunag; public class Sum { static int sum; public static int ...

  9. 11i - 12 How To Set Email Style Preference For All Users At Once?

    (文档 ID 578574.1) In this Document   Goal   Solution   Workflow Information Center, Diagnostics, & ...

  10. UINavigationController  和 UITabBarController

    UINavigationController当设置根控制器的时候,意思就是把根控制器压入栈内,当我们push的时候,我们把下一个控制器压入栈内,当我们pop的时候把上面的控制器的内存释放   UITa ...