在C中加速许多UNIX读/写调用

时间:2017-10-24 23:38:26

标签: c unix io

我正在编写一个程序(公平警告,这是一个家庭作业问题),它会将它收到的5000万个浮点数作为输入文件进行排序并将它们输出到另一个文件中。我正在使用UNIX标准的read()和write()调用来读入输入并将它们写入文件,但由于这些调用有多少,它似乎运行得非常慢。

以下是阅读的相关代码:

floats* input = make_floats(0); // input floats

int ifd = open(iname, O_RDONLY, 0644);

long count; // temp to get count

read(ifd, &count, sizeof(long)); // read in count

// read in numbers from input
for (int i = 0; i < count; ++i) {
    float num;

    read(ifd, &num, sizeof(float));

    floats_push(input, num);
}

它一次一个地读入一个浮点向量(即浮点数*)。

以下是写作:

floats* xs = make_floats(0);
int ofd = open(args->output, O_WRONLY, 0644);
int xs_counter = 0;

// write the local array to file
for (int i = start; i < end; ++i) {
    write(ofd, &(xs->data[xs_counter]), sizeof(float));
    ++xs_counter;
}

开始和结束基本上是我写的多少。我想知道我是否可以基本上把这些变成一个大规模的读写通话,但我有点迷失方向(代码工作得很好,但它很慢)

由于

1 个答案:

答案 0 :(得分:1)

尝试用一次读取替换所有这些读取调用:

float *numbers = malloc(sizeof(float) * count);
read(ifd, numbers, sizeof(float) * count);