Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.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 如何跟踪执行了多少读/写操作。。。?_C_File Io_Buffer_Read Write - Fatal编程技术网

C 如何跟踪执行了多少读/写操作。。。?

C 如何跟踪执行了多少读/写操作。。。?,c,file-io,buffer,read-write,C,File Io,Buffer,Read Write,对于I类,“开发一个C程序,将输入文件复制到输出文件,并计算读/写操作的数量。”我知道如何将输入文件复制到输出文件,但我不完全确定如何跟踪执行了多少读/写操作。该程序应使用不同的缓冲区大小重复复制,并输出使用每个缓冲区大小执行的读/写操作数的列表。我只是不知道如何计算r/w操作的部分。一个人怎么能这样做呢?先谢谢你 以下是我当前的代码(已更新): 我原以为写操作是12…但我不确定…每次调用执行读写操作的函数时,都需要增加一个变量。您可以通过创建一个封装标准i/o函数的函数来实现这一点 例如,将f

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

以下是我当前的代码(已更新):


我原以为写操作是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()调用新函数,
包括一个指示要使用的缓冲区大小的参数

,因此,如果我的测试文件包含以下内容:“test one two”,那么如果我使用一个变量,并且我的缓冲区大小为1,那么应该返回什么@Smeezekitty这些建议的函数可以/应该有另一个参数,即计数器的地址,那么计数器就不需要是“全局的”(使用“静态”修饰符实际上是文件全局的)@PhilectorIV我认为它应该是25。读取的每个字节一个,写入的每个字节一个。在本节末尾尝试读取时,另加一个file@user3629249你是对的。从长远来看,这是一种更好的方法,可以避免代码被全局变量弄乱。为了简单起见,我使用了全局变量示例。但是使用指针是更好的一般编码实践。代码缺失#包括所有读/写操作完成后发布的代码无法关闭文件。main()函数表示返回int,但代码缺少“返回值;”正在使用语句'FILE_MODE',但从未定义编译时,始终启用所有警告,然后修复警告。警告来自编译器的指示,表明编译器认为某些代码可能是错误的
read/write count: 26
read = 13
write = 13

Process returned 0 (0x0)   execution time : 0.003 s
Press ENTER to continue.
size_t fread_count(void *p, size_t size, size_t num, FILE *f){
    iocount++;
    return fread(p, size, num, f);
}