- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
他们都可以根据我的测试改变文件大小。为什么他们都可以将文件更改为更大或更短?fallocate 和 ftruncate 有什么区别?
最佳答案
ftruncate
是一个简单的单一用途函数。 Per the POSIX documentation ,它只是将文件设置为请求的长度:
If
fildes
refers to a regular file, theftruncate()
function shall cause the size of the file to be truncated tolength
. ...
ftruncate()
也是一个标准的 POSIX 函数并且是可移植的。请注意,POSIX 不指定操作系统如何设置文件长度,例如设置为任意长度的文件是否为a sparse file。 .
fallocate()
is a Linux-specific function它以非常具体的方式做了更多:
Allocating disk space
The default operation (i.e., mode is zero) of fallocate() allocates the disk space within the range specified by
offset
andlen
. The file size (as reported bystat(2)
) will be changed ifoffset+len
is greater than the file size. Any subregion within the range specified by offset and len that did not contain data before the call will be initialized to zero. This default behavior closely resembles the behavior of theposix_fallocate(3)
library function, and is intended as a method of optimally implementing that function....
Deallocating file space
Specifying the
FALLOC_FL_PUNCH_HOLE
flag (available since Linux 2.6.38) in mode deallocates space (i.e., creates a hole) in the byte range starting atoffset
and continuing forlen
bytes. Within the specified range, partial filesystem blocks are zeroed, and whole filesystem blocks are removed from the file. After a successful call, subsequent reads from this range will return zeroes....
Collapsing file space
Specifying the
FALLOC_FL_COLLAPSE_RANGE
flag (available since Linux 3.15) in mode removes a byte range from a file, without leaving a hole. The byte range to be collapsed starts atoffset
and continues forlen
bytes. At the completion of the operation, the contents of the file starting at the locationoffset+len
will be appended at the location offset, and the file will belen
bytes smaller....
Zeroing file space
Specifying the
FALLOC_FL_ZERO_RANGE
flag (available since Linux 3.15) in mode zeroes space in the byte range starting atoffset
and continuing forlen
bytes. Within the specified range, blocks are preallocated for the regions that span the holes in the file. After a successful call, subsequent reads from this range will return zeroes....
Increasing file space
Specifying the
FALLOC_FL_INSERT_RANGE
flag (available since Linux 4.1) in mode increases the file space by inserting a hole within the file size without overwriting any existing data. The hole will start atoffset
and continue forlen
bytes. When inserting the hole inside file, the contents of the file starting atoffset
will be shifted upward (i.e., to a higher file offset) bylen
bytes. Inserting a hole inside a file increases the file size bylen
bytes....
关于c - fallocate 和 ftruncate 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49360932/
我试图在 shm_open 和 ftruncate 之后成功地超出共享内存对象。这是代码, char *uuid = GenerateUUID(); int fd = shm_open(uuid, O
我想在每个循环中截断一个文件并重新写入。所以,我使用下面的代码。 但是,这里发生的是我在每个循环的开始处获得了一些额外的空间。没有空间,因为第一次没有添加空间(我也尝试了修剪功能)。 你能帮帮我吗?
我正在尝试使用函数 ftruncate() 来截断文件。 我从网上查到事情是这样的: int ftruncate(int fildes, off_t length); 但我不知道为参数 int fd
我正在尝试用 C++ 编写一个类,它提供一种原子追加到文件的方法,即使在写入过程中出现电源故障的情况下也是如此。 首先,我将当前文件位置(从文件开头开始的 64 位偏移量,以字节为单位)写入一个单独的
我的应用程序尝试用 ftruncate() 和 mmap() 编辑 32-33KB 和 2MB 大页面,但它退出了。 然后我意识到 ftruncate() 失败了: int fd = open("/m
我正在尝试制作一个 C 程序,通过使用 ftruncate 截断或扩展输入文件来将输入文件的大小更改为所需的大小。它还必须使用命令行参数。 例如,以下是有效输入: ./changefilesize d
我正在尝试打开一个共享内存文件并写入其中。问题是 ftruncate 正在返回 -1。 这是我的代码: #include #include #include #include #include
来自 http://pubs.opengroup.org/onlinepubs/7908799/xsh/ftruncate.html 的描述,不是很清楚 ftruncate 是如何工作的。 如果假设,
我想通过使用此文档来构建android源代码: https://source.android.com/source/building-running.html 最后一步是:'make -j16' 一段
我正在尝试修改文件的大小。我正在使用 msys2。我的代码如下所示: #include #include #include void dummy_file(){ FILE *f = fo
据我所知,当我将文件扩展到 2 GB 长度时,ftruncate(2) 不能是原子的。 但幕后究竟发生了什么?我已经应用它,当多个线程扩展文件时它似乎工作正常,但我不确定它是否不会导致任何数据丢失。
我查看了来自 here 的 ftruncate 文档,以及来自 here .对于 IBM 链接,我相应地实现了 ftruncate,但它给我 Invalid Arguments 错误。这是代码: ch
他们都可以根据我的测试改变文件大小。为什么他们都可以将文件更改为更大或更短?fallocate 和 ftruncate 有什么区别? 最佳答案 ftruncate 是一个简单的单一用途函数。 Per
平台是 ARM 上的 Ubuntu Linux。我想将一个字符串写入文件,但我希望每次都截断文件然后写入字符串,即不追加。 我有这个代码: f=fopen("/home/user1/refresh.t
来自 shm_open 手册页: A new shared memory object initially has zero length. The size of the object can be
我想创建一个共享内存对象并将其截断为特定大小。 SHMSIZE定义为512 MODE 设置为 S_IRUSR | S_IWUSR | S_IWGRP | S_IRGRP | S_IWOTH | S_I
当我们创建共享内存时,我们使用 shm_open() 和 ftruncate() 函数。根据我的信息,shm_open() 创建一个共享内存区域。然后我们使用 ftruncate() 函数来配置共享内
我有几个问题基于以下来源: #include #include #include #include int g; int main(void) { int fd = shm_open(
当我想在 linux 中映射一些共享内存时,我会这样做: hFileMap = open(MapName, O_RDWR | O_CREAT, 438); pData = mmap(NULL, Siz
这里的最终目标是我希望能够扩展共享内存段的大小并通知进程在扩展后重新映射该段。然而,似乎在共享内存 fd 上第二次调用 ftruncate 失败并返回 EINVAL。我能找到的唯一其他问题没有答案:f
我是一名优秀的程序员,十分优秀!