Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中加速许多UNIX读/写调用_C_Unix_Io - Fatal编程技术网

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

在C中加速许多UNIX读/写调用,c,unix,io,C,Unix,Io,我正在写一个程序fair warning,这是一个家庭作业问题,它将把5000万个浮点数作为输入文件进行排序,然后输出到另一个文件。我正在使用UNIX标准的读写调用来读取输入并将它们写入文件,但是由于这些调用的数量太多,它似乎运行得很慢 以下是相关代码供阅读: floats* input = make_floats(0); // input floats int ifd = open(iname, O_RDONLY, 0644); long count; // temp to get cou

我正在写一个程序fair warning,这是一个家庭作业问题,它将把5000万个浮点数作为输入文件进行排序,然后输出到另一个文件。我正在使用UNIX标准的读写调用来读取输入并将它们写入文件,但是由于这些调用的数量太多,它似乎运行得很慢

以下是相关代码供阅读:

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;
}
开始和结束基本上就是我写了多少。我想知道我是否可以把这些基本上变成一个大规模的读写调用,但是我有点不知道代码是如何工作的,顺便说一句,它只是很慢


谢谢

尝试用一次读取来替换所有的读取调用:

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

你可以用fread/fwrite来代替。如果我可以的话,赋值指定读/写。你可以一次读一堆,然后读入数组吗?如果你不做floats\u push,读的速度有多快?如果我不推,读的速度只有十分之一秒,是的,我似乎可以读入数组中,我能把指针传进去吗?我必须修改一下,但这对阅读很有效,thanks@AJwr伟大的只要确保拨打免费电话号码;如果在访问完值后使用动态内存清理堆。如果计数很大,则该读取调用几乎肯定返回的字节数小于请求的字节数:读取功能应尝试从与打开的文件描述符相关联的文件中读取nbyte字节。。。成功完成后,这些函数应返回一个非负整数,指示实际读取的字节数。