Select one of the symbols to view example projects that use it.
 
Outline
#include <stdio.h>
#include <string.h>
#include <sys/unistd.h>
#include <sys/stat.h>
#include "esp_err.h"
#include "esp_log.h"
#include "esp_spiffs.h"
TAG
app_main()
Files
loading...
SourceVuESP-IDF Framework and Examplesspiffs samplemain/spiffs_example_main.c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* SPIFFS filesystem example. This example code is in the Public Domain (or CC0 licensed, at your option.) Unless required by applicable law or agreed to in writing, this software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *//* ... */ #include <stdio.h> #include <string.h> #include <sys/unistd.h> #include <sys/stat.h> #include "esp_err.h" #include "esp_log.h" #include "esp_spiffs.h"7 includes static const char *TAG = "example"; void app_main(void) { ESP_LOGI(TAG, "Initializing SPIFFS"); esp_vfs_spiffs_conf_t conf = { .base_path = "/spiffs", .partition_label = NULL, .max_files = 5, .format_if_mount_failed = true }{...}; // Use settings defined above to initialize and mount SPIFFS filesystem. // Note: esp_vfs_spiffs_register is an all-in-one convenience function. esp_err_t ret = esp_vfs_spiffs_register(&conf); if (ret != ESP_OK) { if (ret == ESP_FAIL) { ESP_LOGE(TAG, "Failed to mount or format filesystem"); }{...} else if (ret == ESP_ERR_NOT_FOUND) { ESP_LOGE(TAG, "Failed to find SPIFFS partition"); }{...} else { ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret)); }{...} return; }{...} #ifdef CONFIG_EXAMPLE_SPIFFS_CHECK_ON_START ESP_LOGI(TAG, "Performing SPIFFS_check()."); ret = esp_spiffs_check(conf.partition_label); if (ret != ESP_OK) { ESP_LOGE(TAG, "SPIFFS_check() failed (%s)", esp_err_to_name(ret)); return; }{...} else { ESP_LOGI(TAG, "SPIFFS_check() successful"); }{...} #endif/* ... */ size_t total = 0, used = 0; ret = esp_spiffs_info(conf.partition_label, &total, &used); if (ret != ESP_OK) { ESP_LOGE(TAG, "Failed to get SPIFFS partition information (%s). Formatting...", esp_err_to_name(ret)); esp_spiffs_format(conf.partition_label); return; }{...} else { ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used); }{...} // Check consistency of reported partition size info. if (used > total) { ESP_LOGW(TAG, "Number of used bytes cannot be larger than total. Performing SPIFFS_check()."); ret = esp_spiffs_check(conf.partition_label); // Could be also used to mend broken files, to clean unreferenced pages, etc. // More info at https://github.com/pellepl/spiffs/wiki/FAQ#powerlosses-contd-when-should-i-run-spiffs_check if (ret != ESP_OK) { ESP_LOGE(TAG, "SPIFFS_check() failed (%s)", esp_err_to_name(ret)); return; }{...} else { ESP_LOGI(TAG, "SPIFFS_check() successful"); }{...} }{...} // Use POSIX and C standard library functions to work with files. // First create a file. ESP_LOGI(TAG, "Opening file"); FILE* f = fopen("/spiffs/hello.txt", "w"); if (f == NULL) { ESP_LOGE(TAG, "Failed to open file for writing"); return; }{...} fprintf(f, "Hello World!\n"); fclose(f); ESP_LOGI(TAG, "File written"); // Check if destination file exists before renaming struct stat st; if (stat("/spiffs/foo.txt", &st) == 0) { // Delete it if it exists unlink("/spiffs/foo.txt"); }{...} // Rename original file ESP_LOGI(TAG, "Renaming file"); if (rename("/spiffs/hello.txt", "/spiffs/foo.txt") != 0) { ESP_LOGE(TAG, "Rename failed"); return; }{...} // Open renamed file for reading ESP_LOGI(TAG, "Reading file"); f = fopen("/spiffs/foo.txt", "r"); if (f == NULL) { ESP_LOGE(TAG, "Failed to open file for reading"); return; }{...} char line[64]; fgets(line, sizeof(line), f); fclose(f); // strip newline char* pos = strchr(line, '\n'); if (pos) { *pos = '\0'; }{...} ESP_LOGI(TAG, "Read from file: '%s'", line); // All done, unmount partition and disable SPIFFS esp_vfs_spiffs_unregister(conf.partition_label); ESP_LOGI(TAG, "SPIFFS unmounted"); }{ ... }
Details