C++ QT QIODevice等效于;a和x2B&引用;(读取,但仅附加)
我们有一个非常高性能的应用程序,或者更准确地说,一个需要写入日志文件的可伸缩应用程序 每个实例都有自己的日志文件,但在查看性能指标时,我们偶尔会看到非常慢的写入时间。日志文件将被放到一个共享磁盘上,这样我们就可以在后台运行的虚拟机(带着它的磁盘)离开时查看日志 在通过云提供商执行此操作时,他们建议日志文件应按以下方式以“a+”模式打开: “a+”追加/更新:打开文件进行更新(输入和输出) 所有输出操作都在文件末尾写入数据。 重新定位操作(fseek、fsetpos、rewind)会影响下一个 输入操作,但输出操作将位置移回 文件结束。如果文件不存在,则创建该文件 这允许共享磁盘资源缓存写操作;显然,“只写”模式不行,这就是我们的问题——数千个客户机,每个客户机都必须在下一个客户机写入其日志文件之前保存到磁盘 我找不到与QIODevice的开放标志类似的东西。我所能做的就是读/写,这与a+不同C++ QT QIODevice等效于;a和x2B&引用;(读取,但仅附加),c++,qt,fopen,C++,Qt,Fopen,我们有一个非常高性能的应用程序,或者更准确地说,一个需要写入日志文件的可伸缩应用程序 每个实例都有自己的日志文件,但在查看性能指标时,我们偶尔会看到非常慢的写入时间。日志文件将被放到一个共享磁盘上,这样我们就可以在后台运行的虚拟机(带着它的磁盘)离开时查看日志 在通过云提供商执行此操作时,他们建议日志文件应按以下方式以“a+”模式打开: “a+”追加/更新:打开文件进行更新(输入和输出) 所有输出操作都在文件末尾写入数据。 重新定位操作(fseek、fsetpos、rewind)会影响下一个 输
在QT中是否有更好的方法打开“仅追加但可读取缓存”的文件?这是将QIODevice::OpenMode转换为类似unix的OSs的stdio标志的函数
我不确定它是否将
QIODevice::ReadWrite | QIODevice::Append
转换为“a+”
,但它是:
static inline int openModeToOpenFlags(QIODevice::OpenMode mode)
{
int oflags = QT_OPEN_RDONLY;
#ifdef QT_LARGEFILE_SUPPORT
oflags |= QT_OPEN_LARGEFILE;
#endif
if ((mode & QFile::ReadWrite) == QFile::ReadWrite)
oflags = QT_OPEN_RDWR;
else if (mode & QFile::WriteOnly)
oflags = QT_OPEN_WRONLY;
if (QFSFileEnginePrivate::openModeCanCreate(mode))
oflags |= QT_OPEN_CREAT;
if (mode & QFile::Truncate)
oflags |= QT_OPEN_TRUNC;
if (mode & QFile::Append)
oflags |= QT_OPEN_APPEND;
if (mode & QFile::NewOnly)
oflags |= QT_OPEN_EXCL;
return oflags;
}
下面是完整的源代码:没有做您想要做的事情?有一个细微的区别。ReadWrite允许您尽可能地更新文件的“前端”部分。a+的想法是“只写,但缓存写”。无论如何,这是我正在尝试的最接近的。除非我们再做一次压力测试,否则很难说它是否有效。