C语言 如何跟踪执行了多少读/写操作



对于类,我得到了这个,"开发一个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: %dn", writeCount + readCount);
    printf("read = %dn", readCount);
    printf("write = %dn", writeCount);
}

而对于文本文件:测试一二

结果是:

read/write count: 26
read = 13
write = 13
Process returned 0 (0x0)   execution time : 0.003 s
Press ENTER to continue.

我以为写的应该是12......但我不确定...

每次调用执行读取或写入的函数时,都需要递增一个变量。您可以通过创建一个包装标准 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(),因此您可以轻松地制作一个等效的功能与上面类似,但使用写入和读取而不是 fwrite 和 fread

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

1) 将打开/读/写/

关闭和字符缓冲区[]、读/写计数器、计数器的最终 printf 语句等放入一个单独的函数中

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

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

最新更新