1
0

readwrite.c 2.6 KB

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