1 /* 2 * 代码清单:文件读写例子 3 * 4 * 这个例子演示了如何读写一个文件,特别是写的时候应该如何操作。 5 */ 6 7 #include <rtthread.h> 8 #include <dfs_posix.h> /* 当需要使用文件操作时,需要包含这个头文件 */ 9 10 #define TEST_FN "/test.dat" 11 12 /* 测试用的数据和缓冲 */ 13 static char test_data[120], buffer[120]; 14 15 /* 文件读写测试 */ 16 void readwrite(const char* filename) 17 { 18 int fd; 19 int index, length; 20 21 /* 只写 & 创建 打开 */ 22 fd = open(TEST_FN, O_WRONLY | O_CREAT | O_TRUNC, 0); 23 if (fd < 0) 24 { 25 rt_kprintf("open file for write failed\n"); 26 return; 27 } 28 29 /* 准备写入数据 */ 30 for (index = 0; index < sizeof(test_data); index ++) 31 { 32 test_data[index] = index + 27; 33 } 34 35 /* 写入数据 */ 36 length = write(fd, test_data, sizeof(test_data)); 37 if (length != sizeof(test_data)) 38 { 39 rt_kprintf("write data failed\n"); 40 close(fd); 41 return; 42 } 43 44 /* 关闭文件 */ 45 close(fd); 46 47 /* 只写并在末尾添加打开 */ 48 fd = open(TEST_FN, O_WRONLY | O_CREAT | O_APPEND, 0); 49 if (fd < 0) 50 { 51 rt_kprintf("open file for append write failed\n"); 52 return; 53 } 54 55 length = write(fd, test_data, sizeof(test_data)); 56 if (length != sizeof(test_data)) 57 { 58 rt_kprintf("append write data failed\n"); 59 close(fd); 60 return; 61 } 62 /* 关闭文件 */ 63 close(fd); 64 65 /* 只读打开进行数据校验 */ 66 fd = open(TEST_FN, O_RDONLY, 0); 67 if (fd < 0) 68 { 69 rt_kprintf("check: open file for read failed\n"); 70 return; 71 } 72 73 /* 读取数据(应该为第一次写入的数据) */ 74 length = read(fd, buffer, sizeof(buffer)); 75 if (length != sizeof(buffer)) 76 { 77 rt_kprintf("check: read file failed\n"); 78 close(fd); 79 return; 80 } 81 82 /* 检查数据是否正确 */ 83 for (index = 0; index < sizeof(test_data); index ++) 84 { 85 if (test_data[index] != buffer[index]) 86 { 87 rt_kprintf("check: check data failed at %d\n", index); 88 close(fd); 89 return; 90 } 91 } 92 93 /* 读取数据(应该为第二次写入的数据) */ 94 length = read(fd, buffer, sizeof(buffer)); 95 if (length != sizeof(buffer)) 96 { 97 rt_kprintf("check: read file failed\n"); 98 close(fd); 99 return; 100 } 101 102 /* 检查数据是否正确 */ 103 for (index = 0; index < sizeof(test_data); index ++) 104 { 105 if (test_data[index] != buffer[index]) 106 { 107 rt_kprintf("check: check data failed at %d\n", index); 108 close(fd); 109 return; 110 } 111 } 112 113 /* 检查数据完毕,关闭文件 */ 114 close(fd); 115 /* 打印结果 */ 116 rt_kprintf("read/write done.\n"); 117 } 118 119 #ifdef RT_USING_FINSH 120 #include <finsh.h> 121 /* 输出函数到finsh shell命令行中 */ 122 FINSH_FUNCTION_EXPORT(readwrite, perform file read and write test); 123 #endif 124