这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于VxWorks下的文件系统Read/Write的问题???

共5条 1/1 1 跳转至

关于VxWorks下的文件系统Read/Write的问题???

菜鸟
2005-01-13 19:18:34     打赏

在VxWorks下,我为了知道读写一个4.5K文件的时间,做了如下两个实验:

实验1:将硬盘上的文件打开,接着读出,然后再写回该文件,最后关闭文件。

#define MAX_LENGTH 4610 int fd; char *flename = "Test.dat"; unsigned char buffer[MAX_LENGTH]; unsigned int readlength, writelength; struct timespec tp1, tp2, tp3, tp4, tp5, tp6; int i;

while ( 1 ) { readlength = 0; writelength = 0; bzero( buffer, MAX_LENGTH ); clock_gettime( CLOCK_REALTIME, &tp1 );

fd = open( flename, O_RDWR, 0 ); if ( ERROR == fd ) { printf( "Don't Open File!\n" ); return; } clock_gettime( CLOCK_REALTIME, &tp2 );

readlength = read( fd, buffer, MAX_LENGTH ); clock_gettime( CLOCK_REALTIME, &tp3 );

for ( i = 0; i < MAX_LENGTH; i++ ) { buffer = ~buffer; }

clock_gettime( CLOCK_REALTIME, &tp4 ); writelength = write( fd, buffer, MAX_LENGTH ); clock_gettime( CLOCK_REALTIME, &tp5 );

close( fd ); clock_gettime( CLOCK_REALTIME, &tp6 );

结果:第一次:OpenTime = 173000000(ns); ReadTime = 17000000(ns); WriteTime = 0(ns); CloseTime = 2000000(ns);

以后的每次:OpenTime = 0(ns); ReadTime = 0(ns); WriteTime = 0(ns); CloseTime = 1000000(ns);

实验2:将硬盘上的文件打开,接着读出,最后关闭文件。

#define MAX_LENGTH 4610 int fd; char *flename = "Test.dat"; unsigned char buffer[MAX_LENGTH]; unsigned int readlength, writelength; struct timespec tp1, tp2, tp3, tp4, tp5, tp6; int i;

while ( 1 ) { readlength = 0; writelength = 0; bzero( buffer, MAX_LENGTH ); clock_gettime( CLOCK_REALTIME, &tp1 );

fd = open( flename, O_RDWR, 0 ); if ( ERROR == fd ) { printf( "Don't Open File!\n" ); return; } clock_gettime( CLOCK_REALTIME, &tp2 );

readlength = read( fd, buffer, MAX_LENGTH ); clock_gettime( CLOCK_REALTIME, &tp3 );

close( fd ); clock_gettime( CLOCK_REALTIME, &tp6 );

结果:第一次:OpenTime = 185000000(ns); ReadTime = 17000000(ns); CloseTime = 0(ns);

以后的每次:OpenTime = 2000000(ns); ReadTime = 5000000(ns); CloseTime = 0(ns);

疑问:

1、为什么在加入了write后,相反的所用的整个时间竟然变短了???

2、为什么在加入了write后,Open、Read、Write都不需要时间,而Close却需要很长的时间?相反的,在只有Read的代码中,Open、Read是需要时间开销的,但Close却不需要时间呢?

[align=right][color=#000066][此贴子已经被作者于2005-1-13 11:39:26编辑过][/color][/align]



关键词: 关于     VxWorks     文件     系统     Write     问题    

菜鸟
2005-01-13 19:25:00     打赏
2楼

write并不总是把内容真正写道文件中,但在close时,修改后的内容是肯定会写到文件中的。

所以,退出应用程序之前,一定要close。如果在close之前,系统断电了,将会导致错误的文件内容。如果是tffs中的文件,还可能导致文件不能再次打开。


菜鸟
2005-01-13 19:28:00     打赏
3楼

能解释一下我的两个疑问吗?

1、为什么在加入了write后,相反的所用的整个时间竟然变短了???

2、为什么在加入了write后,Open、Read、Write都不需要时间,而Close却需要很长的时间?相反的,在只有Read的代码中,Open、Read是需要时间开销的,但Close却不需要时间呢?


菜鸟
2005-01-14 16:41:00     打赏
4楼
谢谢楼上的兄弟!但我还有一点不明白,我每次都Close了呀!为什么还是这样呢?

菜鸟
2005-01-15 16:35:00     打赏
5楼

谢谢楼上的兄弟!

测试的两个程序的环境是一样的!我只是将上面的代码互换了。


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]