Browsed by
月份:2015年3月

[Wine-Dev]NtQueryVolumeInformation对FileFsFullSizeInformation的支持

[Wine-Dev]NtQueryVolumeInformation对FileFsFullSizeInformation的支持

1.结构体FILE_FS_FULL_SIZE_INFORMATION的几个属性的含义

参见MSDN

https://msdn.microsoft.com/en-us/library/windows/hardware/ff540267(v=vs.85).aspx

结构体定义如下:

对磁盘的相关知识,参考下图

 

Figure 1: Disk structures:

  1. Track
  2. Geometrical sector
  3. Track sector
  4. Cluster

图片摘自wikipedia http://en.wikipedia.org/wiki/Disk_sector

其中

SectorsPerAllocationUnit 和 BytesPerSector 的值通过名字就可以看出来

下面是对TotalAllocationUnit,CallerAllocationUnit,ActualAllocationUnit的具体表达的含义的研究

2.实验过程

实验基本环境:Windows XP 32bit 磁盘实际大小 9.98GB 分区仅有C: 一个分区

VOID用户使用的磁盘份额为8.40GB 剩余空间为 1.58(未开启磁盘份额)

Newbee用户使用的磁盘份额为4.82MB 剩余空间为295MB(已开启磁盘份额)

分割线右侧的数据为在相应条件下右键打开磁盘的属性菜单的三个值,分别为:已用空间 可用空间  容量

实验1.

不开启配额限制 使用用户VOID(Admin)

==========1===========8.40GB 1.58GB 9.98GB===============
file.c:1228: TotalAllocationUnits(Human Readable) 0 9.989117GB
file.c:1229: CallerAvailableAllocationUnits 00000000 000652e6
file.c:1230: CallerAvailableAllocationUnits(Human Readable) 0 1.580956GB
file.c:1231: ActualAvailableAllocationUnits 00000000 000652e6
file.c:1232: ActualAvailableAllocationUnits(Human Readable) 0 1.580956GB
file.c:1233: SectorsPerAllocationUnit 00000008
file.c:1234: SectorsPerAllocationUnit(Human Readable) 8
file.c:1235: BytesPerSector(Human Readable) 512

实验2.开启配额限制 配额限制为 Newbee:500MB 使用用户Newbee

==========2===========4.87MB 295MB 300MB==================
file.c:1228: TotalAllocationUnits(Human Readable) 0 0.292969GB
file.c:1229: CallerAvailableAllocationUnits 00000000 0001272e
file.c:1230: CallerAvailableAllocationUnits(Human Readable) 0 0.288261GB
file.c:1231: ActualAvailableAllocationUnits 00000000 000652dc
file.c:1232: ActualAvailableAllocationUnits(Human Readable) 0 1.580917GB
file.c:1233: SectorsPerAllocationUnit 00000008
file.c:1234: SectorsPerAllocationUnit(Human Readable) 8
file.c:1235: BytesPerSector(Human Readable) 512

实验3.开启配额限制 配额限制为 VOID : 8.5G 使用用户为VOID

==========3===========6.91GB 1.58GB 8.50GB=================
file.c:1228: TotalAllocationUnits(Human Readable) 0 8.500000GB
file.c:1229: CallerAvailableAllocationUnits 00000000 000652cf
file.c:1230: CallerAvailableAllocationUnits(Human Readable) 0 1.580868GB
file.c:1231: ActualAvailableAllocationUnits 00000000 000652cf
file.c:1232: ActualAvailableAllocationUnits(Human Readable) 0 1.580868GB
file.c:1233: SectorsPerAllocationUnit 00000008
file.c:1234: SectorsPerAllocationUnit(Human Readable) 8
file.c:1235: BytesPerSector(Human Readable) 512

实验4.开启配额限制 配额限制为 VOID 5.0G 使用用户为VOID

==========4===========4.65GB 357MB 5.0GB=====================
file.c:1228: TotalAllocationUnits(Human Readable) 0 5.000000GB
file.c:1229: CallerAvailableAllocationUnits 00000000 000165b4
file.c:1230: CallerAvailableAllocationUnits(Human Readable) 0 0.349319GB
file.c:1231: ActualAvailableAllocationUnits 00000000 000652cf
file.c:1232: ActualAvailableAllocationUnits(Human Readable) 0 1.580868GB
file.c:1233: SectorsPerAllocationUnit 00000008
file.c:1234: SectorsPerAllocationUnit(Human Readable) 8
file.c:1235: BytesPerSector(Human Readable) 512

 

因此可以看出 TotalAllocationUnit和该用户总共可以使用的配额相等

CallerAvailableAllocationUnit和该用户当前可以使用的空间,即”总可用空间-实际已用空间” 相等

ActualAvailableAllocationUnit和该磁盘在未开启磁盘配额时,当前可用的空间相等

[git学习] 跟我一起学git

[git学习] 跟我一起学git



Progit 读书笔记–git学习系列







Progit 读书笔记–git学习系列

1 版本管理系统发展史,git的基本概念及安装

1.1 完整性的保证

git 为保证文件传输的完整性,git使用*SHA-1* checksum hash算法来对文件或目录进行校验和计算。SHA-1得到的结果
是一个40位长的HEX字串

1.2 三个状态

git的三个主要状态为 commited modified 和 staged

  • committed表示这个改动已经记录到数据库中
  • modified表示某文件或目录已经发生改动,还没有被登记
  • staged表示这个改动已经被登记,正准备在commit的时候记录到数据库中

他们三者的关系为:

  • .git 仓库(.git Repo)是代码仓库的所有版本的储存区,就是git的版本数据库
  • Working Dir 是从.git仓库里提取出来的某个版本的独立内容
  • Staging Area 称为暂存区,他是一个文件,保留了下次要提交的

文件列表和信息

git的基本工作流为:
change Files-—> stage these changes —> do a commit

对应的区域分别为:
WorkingDir——>Staging Area–—>.git Repo

1.3 初次使用git 进行的配置

git config 命令

1.配置邮件和用户名

详细用法见 git config 命令

2.配置git使用的编辑器
我喜欢使用vim进行编辑 因此

3.列出你的设置

2 Git 基础(实际操作开始!)

Date: 2015-03-28 六

Author: VOID001

Org version 7.9.3f with Emacs version 24

Validate XHTML 1.0


[Linux]make,MakeFile 使用学习

[Linux]make,MakeFile 使用学习

最近由于任务需要,要对make 和Makefile进行学习,早就想要对makefile进行一个系统的学习了,现在就借这个机会来学。

1.什么是makefile 和 make

make 命令执行的就是根据Makefile里定义的一系列编译 连接规则,将源代码自动编译为 .obj(.o)中间件 进而link为一个完整的应用程序

2.Makefile的基本格式如何?

2.1基本规则

以下是Makefile文件的基本规则

其中  target 就是要make的目标文件 ,可以是一个 Object 也可以是执行文件,还可以是一个标签 (如 make label1,而label1指定了其它的操作)   prerequisites 就是要完成这个target需要的原料   command 即为完成这个target需要的操作(就是各种命令,不局限于编译命令)

2.2Makefile示例

 

[Linux学习] Linux基础

[Linux学习] Linux基础

Linux 基础学习

变量,环境变量,文件查找

创建变量的方式: declare your_var_name

 

上述语句即可用于创建单个变量 也可创建数组变量

查找指令 whereis locate find 一般使用的为这三个

  • whereis查找时只查找二进制文件(-b)man帮助文件(-m)和源代码文件(-s)
  • locate查找时通过搜索/var/lib/mlocate/mlocate.db数据库查找,这个数据库每日更新一次,可以人为通过 updatedb 进行更新

    查找/etc下所有以sh开头的文件

    注意,它不只是在etc目录下查找并会自动递归子目录进行查找

    查找/usr/share/下所有jpg文件

 

  • which 是shell内建的命令,他只从$PATH环境变量中去搜索,因而总被用作查看是否安装了指定的软件
  • find 命令是最强大最复杂的命令 具体学习参考man

find 语法: find [path] [option] [action]

文件压缩

使用zip打包文件

普通打包

其中 -r 为 递归进入源的目录下打包所有文件 -q 表示安静模式 -o后紧跟打包后的输出文件名

压缩级别设置

设置压缩级别,要另外添加参数 -1~9 其中 数字越大压缩率越高 耗时越长 ,可以使用下面一系列变量来查看不同压缩参数的压缩能力

通过上述测试可以看出 默认的zip不加压缩级别参数 ,是以高级别压缩进行的

压缩文件加密与Windows兼容性压缩文件

在压缩参数中 添加 -e 参数 即可实现压缩加密

压缩参数中添加 -l 参数即可让压缩包在Windows下打开后文件可以正常预览 (LF 与CR+ LF的转换)

使用 unzip 解压文件

unzip的用法很简单了 在此举例说明下

 [使用最多的]使用tar打包工具

用tar进行打包和解压

用tar  gzip进行压缩

 命令行的逻辑运算相关