1 /*
2 * File : readspeed.c
3 * This file is part of RT-TestCase in RT-Thread RTOS
4 * COPYRIGHT (C) 2010, RT-Thread Development Team
5 *
6 * The license and distribution terms for this file may be
7 * found in the file LICENSE in this distribution or at
8 * http://www.rt-thread.org/license/LICENSE
9 *
10 * Change Logs:
11 * Date Author Notes
12 * 2010-02-10 Bernard first version
13 */
14
15 #include <rtthread.h>
16 #include <dfs_posix.h>
17
readspeed(const char * filename,int block_size)18 void readspeed(const char* filename, int block_size)
19 {
20 int fd;
21 char *buff_ptr;
22 rt_size_t total_length;
23 rt_tick_t tick;
24
25 fd = open(filename, 0, O_RDONLY);
26 if (fd < 0)
27 {
28 rt_kprintf("open file:%s failed\n", filename);
29 return;
30 }
31
32 buff_ptr = rt_malloc(block_size);
33 if (buff_ptr == RT_NULL)
34 {
35 rt_kprintf("no memory\n");
36 close(fd);
37
38 return;
39 }
40
41 tick = rt_tick_get();
42 total_length = 0;
43 while (1)
44 {
45 int length;
46 length = read(fd, buff_ptr, block_size);
47
48 if (length <= 0) break;
49 total_length += length;
50 }
51 tick = rt_tick_get() - tick;
52
53 /* close file and release memory */
54 close(fd);
55 rt_free(buff_ptr);
56
57 /* calculate read speed */
58 rt_kprintf("File read speed: %d byte/s\n", total_length /tick * RT_TICK_PER_SECOND);
59 }
60
61 #ifdef RT_USING_FINSH
62 #include <finsh.h>
63 FINSH_FUNCTION_EXPORT(readspeed, perform file read test);
64 #endif
65