自己手写实现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是怎么计算出来的?的更多相关文章

  1. Linux命令 ls -l 输出内容含义详解

    Linux命令 ls -l s输出内容含义详解   1. ls  只显示文件名或者文件目录 2. ls -l(这个参数是字母L的小写,不是数字1) 用来查看详细的文件资料 在某个目录下键入ls -l可 ...

  2. Linux 命令 ls -l

    一.ll命令 ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名. Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是很方便. 如果要使用此命令,可以作如下修改:打 ...

  3. Linux命令 ls -l s输出内容含义详解

    1. ls  只显示文件名或者文件目录 2. ls -l(这个参数是字母L的小写,不是数字1) 用来查看详细的文件资料 在某个目录下键入ls -l可能会显示如下信息: 文件属性(占10个字符空间)  ...

  4. Linux命令: ls -l显示文件和目录的详细资料

    ls -l 显示文件和目录的详细资料

  5. linux命令ls -l的默认排序方式

    差不多快实现完了ls -l,但是在测试阶段发现一个问题,对于包含[a-ZA-Z]之外的字符,系统的排序方式并不一样. 很想了会儿,总算发现原来它的排序方式是无视[a-ZA-Z]之外的字符的 至于怎么发 ...

  6. Linux命令 ls 和 ll 的使用方法与基本区别

    Linux 命令 ls 和 ll 的使用方法: ll:罗列出当前文件或目录的详细信息,含有时间.读写权限.大小.时间等信息 ,像Windows显示的详细信息.ll是“ls -l"的别名.相当 ...

  7. linux 命令——ls

    一.  ls命令 ls 命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文 件及文件夹清单. 通过ls 命 ...

  8. LINUX命令LS -AL 解析

    LINUX命令LS -AL 解析 linux命令ls -al 解析 ls是“list”的意思,与早期dos的命令dir功能类似.参数-al则表示列出所有的文件,包括隐藏文件,就是文件前面第一个字符为. ...

  9. linux下ls -l命令(即ll命令)查看文件的显示结果分析

    在linux下使用“ls -l”或者“ls -al”或者“ll”命令查看文件及目录详情时,shell中会显示出好几列的信息.平时也没怎么注意过,今天忽然心血来潮想了解一下,于是整理了这篇博客,以供参考 ...

随机推荐

  1. day7-python类反射

    一.概述 一般的高阶语言都有反射的功能特性,python也不例外,网上资料显示,python支持类反射和模块反射,今天就先学习一下类反射的相关知识,模块反射后续再展开把.Python的类反射用于把字符 ...

  2. http请求的GET和POST请求:查询和新增(ajax)

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  3. 更新pip源,提高python下载安装包速度的方式(window及linux)

    python需要经常安装各种模块,而pip是很强大的模块安装工具,自带的pip下载源在国外,导致每次下载速度太慢,所以我们最好是将自己使用的pip源更换更换成国内的下载源可提高开发效率 linux环境 ...

  4. Shell学习笔记——算数运算与条件测试

    算数运算 1. 使用let命令 #!/sbin/bash var1=2 var2=3 let sum=var1+var2 echo $sum 使用let命令式,变量前不需要加$号 只用于整数运算,不适 ...

  5. [AirFlow]AirFlow使用指南四 DAG Operator Task

    1. DAG 在Airflow中,DAG或有向无环图是你运行所有任务的集合,以某种组织方式来反映所有任务之间的关系和依赖. 例如,一个简单的DAG可以包括三个任务:A,B和C.可以说A必须在B运行之前 ...

  6. Ubuntu与ROS的Docker桌面系统与ROS在线练习课程(在线Linux虚拟机)

    ROS在线练习课程正在逐步完善中,目前以ROS官网中文资料制作,可参考: https://www.shiyanlou.com/courses/854  邀请码 U23ERF8H 安装Ubuntu+RO ...

  7. Jenkins简单的使用

    1.每个版本开发提单子,写清楚发布那个项目.配置文件.所执行SQL语句等:QA开始部署测试环境 2.如下时发布项目 一.版本发布 登陆系统,选择对应的项目(以api-gateway为例,如果找不到对应 ...

  8. nodejs——js 实现webSocket 兼容移动端

    nodejs——js 实现webSocket 兼容移动端 //服务器端 //npm install --save ws const express = require('express'); cons ...

  9. Python2、3学习及迁移

    一.Python2.7 Python 2.7教程 - 廖雪峰的官方网站 Python 基础教程 | 菜鸟教程 二.Python3 Python教程 - 廖雪峰的官方网站 Python3 教程 | 菜鸟 ...

  10. git版本管理工具的使用

    Git的一些资料 --关于git的介绍就此忽略了--- Git官网http://git-scm.com/ Visual Studio Tools for Git下载地址https://visualst ...