我在C中工作,我需要将某些输出值写入文本文件。这些值将在脚本的不同位置写入文件。
我说的是50行分为总共5分钟的执行时间。
我的脚本正在测试硬件性能(包括cpu和磁盘缓存),所以没有什么能减慢速度或使用内存非常重要。
每次我想写一行或者只是让文件打开以便整个执行时,使用fopen()和fclose()会更好吗?
答案 0 :(得分:4)
为什么不将所有内容存储在内存中并一次性写出来?我的意思是使用结构数组或类似的东西。到时候,全部写下来(fwrite
?)。
如果您认为这将使用内存并破坏您的测试,请问自己:I/O
不会破坏您的测试?有没有其他方法来存储信息?
答案 1 :(得分:2)
你不能两种方式 - 你必须使用内存或使用磁盘缓存。通常,人们会将统计数据保存在内存中并在测试结束时写入。但是,如果您想要最小化内存使用,请在测试开始时打开文件并随时写下统计信息。
答案 2 :(得分:0)
这些输出是否是您的磁盘缓存测试的一部分?如果没有,为什么不直接写入串口&让另一个程序读取该串口&写你的文件?只是一个想法。
你可以做的另一件事就是写一个字符串“echo>> file.txt”,然后把这个字符串传递给system()函数(在UNIX上)或windows中的等价函数。
如果这不是一个选项,请将输出写入stdout&然后写一个简短的脚本来捡起它写信给你。
答案 3 :(得分:0)
正如尼尔所说,你无法双管齐下。内存分配和I / O操作往往都是昂贵的。除非你在一台真正的小机器上运行,否则在开始计时测试之前分配一个大的缓冲区 然后填写它以进行写入可能是最好的。
FILE * fid = fopen( path, "w" ); if ( !fid ) error(); setvbuf( fid, NULL, _IOFBF, BLKSIZ * n )
其中“n”确定您要设置的空间大小。 < stdio.h中>将为您处理所有缓冲繁忙的工作,包括在文件关闭时释放缓冲区。
保持一切足够小,包括缓冲区,这样就不会触发虚拟机交换,或者每次定时测试都会对你造成不良影响。你可以运行大量的RAM而没有交换文件吗?