如何用C++创建一个用于二进制文件读写操作的Linux I/O基准?
我试图用下面的代码生成一个10MB的文件,但它返回“分段错误(核心转储)”。

#define FILE_SIZE 10240

#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

int main()

{
    int fd, i;
    int stream[FILE_SIZE];
    double span;

    clock_t start,end;

    start=clock();

    fd=open("data.bin", O_CREAT|O_TRUNC|O_WRONLY, S_IRWXU);

    srand(time(NULL));

    for(i=0; i<FILE_SIZE; i++){

        stream[i]=rand()%2;
        write(fd, (char*)stream[i], strlen((char*)stream[i]));

    }

    for(i=0; i<FILE_SIZE; i++)
        read(fd, (char*)stream[i], strlen((char*)stream[i]));

        close(fd);

        end=clock();
        time_lapse=((double)(end-start))/CLOCKS_PER_SEC;

        return 0;
}

然后它会返回一些由于写和读函数中包含的转换而产生的警告,我相信有更好的方法可以做到这一点。
有人能帮我吗?
提前谢谢你,
安东尼奥

最佳答案

你最大的问题是你把stream[i]当作一个字符串!它不是字符串,而是一个int值。
使用&stream[i]获取指向它的指针,并使用sizeof stream[i]获取它的大小。实际上,不需要分别编写每个元素,只需一次编写整个数组即可:

write(fd, stream, sizeof stream);

你也可以照着读。
这个问题的一个重要迹象是,您需要使用C风格的转换。如果你需要用C++来做,那么你就应该做一些你不应该做的事情。
除此之外,你还没有做任何C++特定的事情,你的代码可以是普通C。
C++解决方案将使用std::fstream代替。
如果仍然需要使用POSIX低级函数,请不要忘记错误检查。您调用的每个函数都可能失败。这实际上包括对close的调用。

关于c++ - 用C++读写二进制文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52643985/

10-12 16:14