在unistd.h中
使用open()和O_APPEND标志将primefaces写入始终保存到文件末尾…
这是伟大的,所有,但如果我需要知道它的primefaces附加到文件的偏移量…?
我意识到O_APPEND通常用于日志文件,但是我实际上想知道在文件中以primefaces方式附加的偏移量。
我没有看到任何明显的方式来做到这一点..? 有人知道吗?
谢谢
要获取文件描述符中的当前位置,请使用偏移量为0
lseek()
和SEEK_CUR
。
int fd = open(...); if (fd) { off_t positionWhereAppendingBegins = lseek(fd, 0, SEEK_CUR); write(...); close(fd); }
请注意,如果描述符以其他方式打开,例如通过socket()
,这将不会给您可靠的结果。
当文件被打开时,文件被写入文件的偏移量。 如果另一个进程在打开和写入之间写入文件,则文件的内容是不确定的。
处理多个进程写入单个文件的正确方法是,所有进程使用O_APPEND标志打开文件,获得排它锁,一旦获得锁,在写入文件之前寻找文件末尾,最后关闭文件释放锁定。
如果要在写入之间保持文件打开状态,请使用O_APPEND标志打开文件来启动进程。 在这种情况下,写入循环获得排他锁,寻找到文件末尾,写入文件并释放锁。
如果你真的需要文件位置, lseek将在调用的时候返回调用者文件描述符的文件偏移量。