c++ - 如何使用 C++ 中的 Write 系统调用?

标签 c++ qt file qvector

我正在尝试写入一个文件,并希望使用 Write System Call 使其更快。基本上我有一个 QVector 并且我想将结果存储在一个文件中。最初我只是遍历数组,但它太慢了。所以我做了一些研究,发现了一个叫做 Write System Call 的东西。 ,但我不知道如何设置代码。

这是我目前尝试过的:

/*Header File*/

QVector<unsigned short> rawData;

/*Implementation File*/

int fd = open("output.txt", O_WRONLY)L
write(fd, &rawData, rawData.size());
close(fd);

虽然上面的代码没有让我崩溃,但它实际上并没有向输出文件写入任何内容。知道我做错了什么吗?

编辑:

使用 fwrite 我可以写入文件,但文件中的数据是一些奇怪的 Unicode。基本上这不是我想要得到的数字。这是我正在做的:

FILE * pFile;

pfile = fopen("pixelValues.txt", "wb");

fwrite(&rawData, sizeof(unsigned short), sizeof(rawData), pFile);

fclose(pFile);

最佳答案

QVector对象和里面的元素是有区别的。你可能想写 QVector 元素,所以为了做到这一点你需要这样的东西:

template<typename T>
int writeVector(const QVector<T>& vec, int fd)
{
    // note: the size argument to write() is about the number of bytes
    // which is: (size of each element) * (number of elements to write) 
    return write(fd, vec.constData(), (sizeof(T)) * vec.size());
}

要获得更好的解决方案,请考虑使用 QDataStream相反:

template<typename T>
void writeVectorBetter(QDataStream& stream, const QVector<T>& vec)
{
    stream << vec;
}

这还将确保您可以以一致的方式从文件中读回信息。

关于c++ - 如何使用 C++ 中的 Write 系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41317120/

相关文章:

c++ - 是否有统一的方式来存储和传递任何可调用对象?

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?

c++ - 哪一位是第一位,当你位移时,它实际上是朝那个方向移动的吗?

linux - 如何在 linux ubuntu 中启动 gui 应用程序

c++ - 使用 glDrawElements 时如何将法线传递给 GLSL 中的顶点着色器

python - QGraphicsView 的大小与预期不同

python - Qt 设计器 Python Tableview 项目

在 C 中仅将文件的一部分复制到新文件

c - C 中 main() 执行一半后输出消失

c++ - 将数字数据写成二进制还是写成二进制?