如何跟踪执行的读/写操作数量......?

时间:2015-03-13 18:02:15

标签: c file-io buffer read-write

对于类I,我得到了这个,"开发一个C程序,将输入文件复制到输出文件并计算读/写操作的数量。"我知道如何将输入文件复制到输出文件的操作,但我不完全确定如何跟踪执行了多少读/写操作。该程序应该使用不同的缓冲区大小重复复制,并输出使用每个缓冲区大小执行的读/写操作次数的列表。我只是不确定如何计算r / w操作的数量。怎么可能这样做呢?提前谢谢。

这是我目前的代码(已更新):

#include <stdio.h>
#include "apue.h"
#include <fcntl.h>

#define BUFFSIZE 1

int main(void)
{
    int n;
    char buf[BUFFSIZE];
    int input_file;
    int output_file;
    int readCount = 0;
    int writeCount = 0;

    input_file = open("test.txt", O_RDONLY);
    if(input_file < 0)
    {
        printf("could not open file.\n");
    }

    output_file = creat("output.txt", FILE_MODE);

    if(output_file < 0)
    {
        printf("error with output file.\n");
    }


    while((n = read(input_file, buf, BUFFSIZE)) > 0)
    {
        readCount++;
        if(write(output_file, buf, n) == n){
            writeCount++;
        }else{
            printf("Error writing");
        }
    }

    if(n < 0)
    {
        printf("reading error");
    }

    printf("read/write count: %d\n", writeCount + readCount);
    printf("read = %d\n", readCount);
    printf("write = %d\n", writeCount);

}

对于文本文件:test one two

结果是:

read/write count: 26
read = 13
write = 13

Process returned 0 (0x0)   execution time : 0.003 s
Press ENTER to continue.

我当时认为写作会是12 ......但我不确定......

2 个答案:

答案 0 :(得分:0)

每次调用执行读取或写入的函数时,都需要递增变量。你可以通过创建一个包含标准i / o函数的函数来做到这一点。

例如,用以下内容替换fread:

size_t fread_count(void *p, size_t size, size_t num, FILE *f){
    iocount++;
    return fread(p, size, num, f);
}

iocount必须在范围内(例如全球)

如果需要单独计算读写次数,请使用单独的变量。 一个是为读取而递增的,另一个是为写入递增的。 -编辑- 因为你使用的是write()和read(),所以你可以轻松地创建一个等价物 功能如上,但使用write和read代替fwrite和fread

答案 1 :(得分:0)

帮助尝试不同的缓冲区大小:

1)将open / read / write / close和char buffer [],读/写计数器,计数器的final printf语句等放入一个单独的函数中

2)在main()中,添加一个包含要尝试的缓冲区大小的表。

3)从main()调用新函数,    包括一个指示要使用的缓冲区大小的参数