据我了解,当我将文件扩展到2 GB长度时,ftruncate(2)
并不是原子的。
但是幕后到底发生了什么?我已经应用了它,当有多个线程扩展该文件时,它似乎可以正常工作,但是我不确定它是否不会造成任何数据丢失。
此外,我们假设有2个线程同时调用ftruncate(2)
,第一个线程正在将文件扩展到2 GB。同时,第二个线程调用ftruncate(2)
。现在怀疑是第一个线程没有完成完整的工作,而第二个线程也开始了ftruncate,那么会发生什么?
如果这引起任何麻烦,使用文件锁定是否是一个明智的解决方案?我正在编写的代码是一个库,因此当使用该库时,我将不知道正在使用该库的进程的状态和配置。在这种情况下是否有可能出现死锁?
答案 0 :(得分:0)
回答我的这个老问题,ftruncate(2)
就我过去观察到的而言是原子的。
@BearAqua在评论中分享了ftruncate(2)
与POSIX shared memory
在MacOS上功能不正常的链接,但这不适用于常规文件。
尽管据我所知,在ftruncate(2)
是原子性或类似原因的任何地方都找不到文档,但是据我测试,它是原子性的。