linux命令ls -l的total是怎么计算出来的?
自己手写实现ls -l命令纠结了很久的地方,刚才总算搞明白了。直接上代码重要部分
long nTotalBlocks = 0;
DIR* dp = opendir(dirPathName);
struct dirent* dirp;
while ((dirp = readdir(dp)) != NULL) {
lstat(fullPath, &sbuf);
long nBlocks = sbuf.st_size / 4096;
if (sbuf.st_size % 4096 > 0)
nBlocks++;
if (S_ISLNK(sbuf.st_mode))
nBlocks = 0;
nTotalBlocks += nBlocks;
}
closedir(dp);
cout << "total " << nTotalBlocks * 4 << endl;
4096是块的默认大小,由于total的单位是k(1024),所以后面还要再乘以4。
total其实就是所有文件所占的块的大小总和,由于文件大小并不一定都是标准的4096的倍数,比如某文件大小为10000,就需要占用10000/4096+1=3个块,占用块的大小就是3*4096,以k为单位就是3*4096/1024=12。
网上很多人说得都不错,但是漏掉了一个关键部分,那就是ls -l是不计算符号链接的,因为符号连接的st_size表示的是符号链接所指地址的长度,仔细一看,APUEv3中文版P97的4.17 符号链接的那个实例就可以看出来了。

linux命令ls -l的total是怎么计算出来的?的更多相关文章
- Linux命令 ls -l 输出内容含义详解
Linux命令 ls -l s输出内容含义详解 1. ls 只显示文件名或者文件目录 2. ls -l(这个参数是字母L的小写,不是数字1) 用来查看详细的文件资料 在某个目录下键入ls -l可 ...
- Linux 命令 ls -l
一.ll命令 ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名. Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是很方便. 如果要使用此命令,可以作如下修改:打 ...
- Linux命令 ls -l s输出内容含义详解
1. ls 只显示文件名或者文件目录 2. ls -l(这个参数是字母L的小写,不是数字1) 用来查看详细的文件资料 在某个目录下键入ls -l可能会显示如下信息: 文件属性(占10个字符空间) ...
- Linux命令: ls -l显示文件和目录的详细资料
ls -l 显示文件和目录的详细资料
- linux命令ls -l的默认排序方式
差不多快实现完了ls -l,但是在测试阶段发现一个问题,对于包含[a-ZA-Z]之外的字符,系统的排序方式并不一样. 很想了会儿,总算发现原来它的排序方式是无视[a-ZA-Z]之外的字符的 至于怎么发 ...
- Linux命令 ls 和 ll 的使用方法与基本区别
Linux 命令 ls 和 ll 的使用方法: ll:罗列出当前文件或目录的详细信息,含有时间.读写权限.大小.时间等信息 ,像Windows显示的详细信息.ll是“ls -l"的别名.相当 ...
- linux 命令——ls
一. ls命令 ls 命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文 件及文件夹清单. 通过ls 命 ...
- LINUX命令LS -AL 解析
LINUX命令LS -AL 解析 linux命令ls -al 解析 ls是“list”的意思,与早期dos的命令dir功能类似.参数-al则表示列出所有的文件,包括隐藏文件,就是文件前面第一个字符为. ...
- linux下ls -l命令(即ll命令)查看文件的显示结果分析
在linux下使用“ls -l”或者“ls -al”或者“ll”命令查看文件及目录详情时,shell中会显示出好几列的信息.平时也没怎么注意过,今天忽然心血来潮想了解一下,于是整理了这篇博客,以供参考 ...
随机推荐
- day7-python类反射
一.概述 一般的高阶语言都有反射的功能特性,python也不例外,网上资料显示,python支持类反射和模块反射,今天就先学习一下类反射的相关知识,模块反射后续再展开把.Python的类反射用于把字符 ...
- http请求的GET和POST请求:查询和新增(ajax)
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 更新pip源,提高python下载安装包速度的方式(window及linux)
python需要经常安装各种模块,而pip是很强大的模块安装工具,自带的pip下载源在国外,导致每次下载速度太慢,所以我们最好是将自己使用的pip源更换更换成国内的下载源可提高开发效率 linux环境 ...
- Shell学习笔记——算数运算与条件测试
算数运算 1. 使用let命令 #!/sbin/bash var1=2 var2=3 let sum=var1+var2 echo $sum 使用let命令式,变量前不需要加$号 只用于整数运算,不适 ...
- [AirFlow]AirFlow使用指南四 DAG Operator Task
1. DAG 在Airflow中,DAG或有向无环图是你运行所有任务的集合,以某种组织方式来反映所有任务之间的关系和依赖. 例如,一个简单的DAG可以包括三个任务:A,B和C.可以说A必须在B运行之前 ...
- Ubuntu与ROS的Docker桌面系统与ROS在线练习课程(在线Linux虚拟机)
ROS在线练习课程正在逐步完善中,目前以ROS官网中文资料制作,可参考: https://www.shiyanlou.com/courses/854 邀请码 U23ERF8H 安装Ubuntu+RO ...
- Jenkins简单的使用
1.每个版本开发提单子,写清楚发布那个项目.配置文件.所执行SQL语句等:QA开始部署测试环境 2.如下时发布项目 一.版本发布 登陆系统,选择对应的项目(以api-gateway为例,如果找不到对应 ...
- nodejs——js 实现webSocket 兼容移动端
nodejs——js 实现webSocket 兼容移动端 //服务器端 //npm install --save ws const express = require('express'); cons ...
- Python2、3学习及迁移
一.Python2.7 Python 2.7教程 - 廖雪峰的官方网站 Python 基础教程 | 菜鸟教程 二.Python3 Python教程 - 廖雪峰的官方网站 Python3 教程 | 菜鸟 ...
- git版本管理工具的使用
Git的一些资料 --关于git的介绍就此忽略了--- Git官网http://git-scm.com/ Visual Studio Tools for Git下载地址https://visualst ...