mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
100 lines
2.8 KiB
C
100 lines
2.8 KiB
C
|
/* 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"
|
||
|
|
||
|
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 (%d)", ret);
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
size_t total = 0, used = 0;
|
||
|
ret = esp_spiffs_info(NULL, &total, &used);
|
||
|
if (ret != ESP_OK) {
|
||
|
ESP_LOGE(TAG, "Failed to get SPIFFS partition information");
|
||
|
} else {
|
||
|
ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used);
|
||
|
}
|
||
|
|
||
|
// 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(NULL);
|
||
|
ESP_LOGI(TAG, "SPIFFS unmounted");
|
||
|
}
|