- 浏览: 140825 次
文章分类
最新评论
与文件结构关系十分密切的 stat 结构中有个 st_size 成员,它表示以字节为单位的文件的长度,但这个字段只对普通文件、目录文件和符号链接有意义(FreeBSD 8.0、Mac OS X 10.6.8 和 Solaris 10 对管道也定义了文件长度,表示可从该管道中读到的字节数)。
对于普通文件,其长度可以是 0,在开始读这种文件时,将得到文件结束指示。
对于目录,文件长度通常是一个数(如 16 或 512)的整数倍。
对于符号链接,文件长度是在文件名中的实际字节数(注意:因为符号链接文件长度总是由 st_size 指示,所以它并不包含通常 C 语言用作名字结尾的 null 字节)。如下面的例子中,文件长度 7 就是路径名 usr/lib 的长度:
lrwxrwxrwx 1 root 7 Sep 25 07:14 lib -> usr/lib
对于含有空洞的文件(空洞是由所设置的偏移量超过文件尾端,并写入了某些数据后造成的),比如下列情况:
根据 du 命令的输出,该文件所使用的磁盘空间总量是 139264 个字节,远小于 ls 命令的显示结果,所以它显然含有很多空洞。
对于没有写过的字节位置,read 函数读到的字节是 0。如果执行下面的命令,可以看出正常的 I/O 操作读整个文件长度:
如果使用实用程序(如 cat)复制这个文件,那么所有这些空洞都会被填满,其中所有实际数据字节皆填写为 0。
从中可见,新文件所用的实际字节数是 8495104(512 * 16592),也并不等于 ls 命令显示的 8483248。这是因为文件系统还使用了若干块以存放指向实际数据的各个指针。
另外,前面说过,在打开文件时指定 O_TRUNC 这一标志,可将文件的长度截断为 0。实际上,存在两个专门的文件长度截断函数:
这两个函数都将一个现有文件长度截断为 length。如果文件以前的长度小于 length,那么新增的这部分数据将被读作 0(也就是可能创建了一个空洞)。
对于普通文件,其长度可以是 0,在开始读这种文件时,将得到文件结束指示。
对于目录,文件长度通常是一个数(如 16 或 512)的整数倍。
对于符号链接,文件长度是在文件名中的实际字节数(注意:因为符号链接文件长度总是由 st_size 指示,所以它并不包含通常 C 语言用作名字结尾的 null 字节)。如下面的例子中,文件长度 7 就是路径名 usr/lib 的长度:
lrwxrwxrwx 1 root 7 Sep 25 07:14 lib -> usr/lib
对于含有空洞的文件(空洞是由所设置的偏移量超过文件尾端,并写入了某些数据后造成的),比如下列情况:
$ ls -l core -rw-r--r-- 1 sar 8483248 Nov 18 12:18 core $ du -s core 272 core # 这里一个字节块只有 512 个字节
根据 du 命令的输出,该文件所使用的磁盘空间总量是 139264 个字节,远小于 ls 命令的显示结果,所以它显然含有很多空洞。
对于没有写过的字节位置,read 函数读到的字节是 0。如果执行下面的命令,可以看出正常的 I/O 操作读整个文件长度:
$ wc -c core # 以字节为单位来统计 8483248 core
如果使用实用程序(如 cat)复制这个文件,那么所有这些空洞都会被填满,其中所有实际数据字节皆填写为 0。
$ cat core > core.copy $ ls -l core* -rw-r--r-- 1 sar 8483248 Nov 18 12:18 core -rw-rw-r-- 1 sar 8483248 Nov 18 12.27 core.copy $ du -s core* 272 core 16592 core.copy
从中可见,新文件所用的实际字节数是 8495104(512 * 16592),也并不等于 ls 命令显示的 8483248。这是因为文件系统还使用了若干块以存放指向实际数据的各个指针。
另外,前面说过,在打开文件时指定 O_TRUNC 这一标志,可将文件的长度截断为 0。实际上,存在两个专门的文件长度截断函数:
#include <unistd.h> int truncate(const char *pathname, off_t length); int ftruncate(int fd, off_t length); /* 返回值:若成功,都返回 0;否则,都返回 -1 */
这两个函数都将一个现有文件长度截断为 length。如果文件以前的长度小于 length,那么新增的这部分数据将被读作 0(也就是可能创建了一个空洞)。
发表评论
-
打开伪终端设备
2018-07-09 20:50 1248在伪终端概述一节中已对 PTY进行了初步的介绍。尽管 ... -
伪终端概述
2018-06-02 11:05 1533伪终端就是指,一个应用程序看上去像一个终端,但事实上它 ... -
终端窗口大小和 termcap
2018-05-29 22:39 791多数 UNIX 系统都提供了一种跟踪当前终端窗口大小的 ... -
终端规范模式和非规范模式
2018-05-29 00:25 937终端规范模式很简单:发一个读请求,当一行已经输入后,终 ... -
终端标识
2018-05-23 11:18 566尽管控制终端的名字在多数 UNIX 系统上都是 /de ... -
波特率和行控制函数
2018-05-22 07:53 933虽然大多数终端设 ... -
终端属性和选项标志
2018-05-20 07:40 706tcgetattr 和 tcsetattr ... -
终端特殊输入字符
2018-05-17 06:33 807终端支持下表所示的特殊输入字符。 为了更改 ... -
终端 I/O 综述
2018-05-10 07:56 432终端设备可认为是由内核中的终端驱动程序控制的。每个终端 ... -
POSIX 信号量
2018-05-09 00:03 575在XSI IPC通信之信 ... -
XSI IPC 通信之共享存储
2018-04-25 07:18 943在XSI IPC通信之消息队列和XSI IPC通信之信 ... -
XSI IPC通信之信号量
2018-04-17 23:38 612在XSI IPC通信之消 ... -
XSI IPC通信之消息队列
2018-04-15 10:54 490消息队列是消息的链接表,存储在内核中,由消息队列标识符 ... -
XSI IPC 相似特征介绍
2018-02-08 23:48 479有 3 种称作 XSI IPC ... -
IPC 通信之 FIFO
2018-02-06 22:55 412FIFO 也被称为命名管道,未命名的管道只能在两个相关 ... -
IPC 通信之管道
2018-01-30 22:22 383管道是 UNIX 系统 IPC 的最古老但也是最常用的 ... -
readv/writev 函数及存储映射 I/O
2018-01-19 00:57 878readv 和 writev 函数可用于在一次函数调用 ... -
POSIX 异步 I/O
2018-01-16 21:33 449POSIX 异步 I/O 接口为对不同类型的文件进行异 ... -
fcntl 记录锁
2018-01-06 23:48 584记录锁的功能是:当有进程正在读或修改文件的某个部分时, ... -
守护进程惯例
2018-01-06 23:52 432UNIX 系统中,守护进程遵循下列通用惯例。 ...
相关推荐
当你遇到“`fwrite` 写文件后,用 `fread` 读出来文件长度是0,即 `fread` 读不出数据”的问题时,可能存在以下几个原因: 1. **文件打开模式错误**: - 当你使用 `fopen` 函数打开文件时,使用的模式可能只允许...
这个"易语言取网络文件长度源码.zip"压缩包提供的正是实现这一功能的源代码。 网络文件长度通常指的是HTTP响应头中的"Content-Length"字段,它表示服务器发送给客户端的数据量。在编程中,我们需要通过发送HTTP请求...
在易语言中,取网络文件长度是一项重要的功能,它能帮助开发者获取远程服务器上文件的大小,这对于下载管理器、网络资源监控等应用来说是必不可少的。 取网络文件长度的功能通常涉及到HTTP协议和TCP/IP协议栈的使用...
"利用Length属性获取音乐文件长度"这个主题主要涉及到的是如何读取音频文件的播放时长。这里的Length属性通常指的是文件的大小或者播放时间,具体到音频文件,它表示的是音乐的总时长。在Delphi中,这通常需要通过...
这里提到的"易语言取网络文件长度源码"是一个关于如何获取网络文件大小的代码示例。 网络文件长度,通常指的是文件在网络上的大小,以字节为单位。在实际应用中,我们可能需要这个信息来预估下载时间、管理存储空间...
标题提到的"dotnet 记在 Linux 上某些文件的文件长度为 0 但是存在内容"是一个具体的技术问题,通常涉及到文件系统、编程语言(如.NET框架的dotnet)以及跨平台操作。这个问题可能在Linux环境下使用.NET应用时出现,...
标准io流获取文件长度
在这个"易语言取网络文件长度源码.7z"压缩包中,包含的是用易语言编写的一段代码,其主要功能是获取网络文件的长度。这个功能在很多网络应用中非常实用,例如下载管理器、文件预览等,都需要先知道文件的大小才能...
计算一个文件夹中每个文件的长度 并把长度追加到该文件的末尾
通过这样的改造,我们不仅解决了未知文件长度的问题,还提供了友好的用户体验,用户可以看到实时的下载进度,增加了程序的交互性和可靠性。 在压缩包文件"http进度下载2"中,应该包含了改造后的源代码,供开发者...
资源名称:MS_SQL日志文件长度过大的处理方法 资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
接下来,我们可以通过`HttpWebResponse`对象的`ContentLength`属性获取文件长度: ```csharp HttpWebResponse response = (HttpWebResponse)request.GetResponse(); long length = response.ContentLength; ...
AES任意文件长度加解密C语言实现,已经在vs上调试成功,下载复制即可用。
这个"易语言取网络文件长度源码"是一个入门级的教程源码,旨在教授用户如何通过编程获取远程网络文件的大小。 在易语言中,网络文件长度的获取通常涉及到HTTP协议,因为大部分网络文件是通过HTTP或HTTPS协议传输的...
在给出的压缩包文件中,"测试NAudio获取所有音频文件的时间长度.gpState"可能是项目的状态文件,".sln"是Visual Studio解决方案文件,".suo"是用户选项文件,而"WindowsFormsApplication1"可能是一个包含UI界面的...
从最基本的测试文件字节数,行数与字数,我把它扩展到能判断文件类型,最后再计算程序运行的时间;虽然算法比较简单,但程序设计了不少函数和系统调用,在写的过程中我也学到了不少,特此与大家分享~~~
选择了讯飞最新的msc.dll/msc64.dll在线库,因其接口没有delphi的,通过对比把讯飞网上提供的tts_sample.c改为delphi,在delphi7下编译通过。此前版本因无法修改资源,故重新发,主要是修正声音文件长度。
文件头包含了关于文件长度、Shape类型以及图层范围等元数据信息,这对于理解和处理Shapefile至关重要。空间数据记录由记录头(包括记录号和坐标记录长度)和记录内容(几何类型和坐标)组成。记录号从1开始,坐标...