- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 C++ 编写一个类,它提供一种原子追加到文件的方法,即使在写入过程中出现电源故障的情况下也是如此。
首先,我将当前文件位置(从文件开头开始的 64 位偏移量,以字节为单位)写入一个单独的日志文件。然后,我将请求的数据写入日期文件的末尾。最后,我在日志文件上调用 ftruncate()(将截断大小设置为 0)。
主要思想是,如果此类曾经被要求打开一个具有非空日志文件的文件,那么您就知道写入被中断了,您可以从日志文件中读取最后一次写入的位置,然后 fseek 到那个地方您丢失了最后的部分写入,但文件不应损坏。
不幸的是,ftruncate() 似乎是异步的。实际上,即使我在 ftruncate 之后调用 fflush() 和 fsync(),我也会看到日志在进行大量写入时增长到数百字节。它最终总是以 0 结束,但我希望看到它始终为 0 号或 8 号。
是否可以使 ftruncate 完全同步?还是有更好的方式使用该期刊?
最佳答案
ftruncate()
不会更改文件描述符在文件中的写入偏移量。如果您在调用 ftruncate()
后保持文件打开并写入下一个长度,那么发生的情况是文件的偏移量仍在增加。当您写入时,它会将文件的长度重置为偏移量,然后将您的字节写入那里。
您可能想要做的是在调用 ftruncate()
之后调用 lseek(fd, 0, SEEK_SET)
以便下一次写入文件在文件的开头。
关于c++ - ftruncate() 是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9154551/
我试图在 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
我是一名优秀的程序员,十分优秀!