mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 16:14:16 +01:00 
			
		
		
		
	Introduced the LFS_O_SNAPSHOT flag
LFS_O_SNAPSHOT brings back some of littlefs's idiosyncratic behavior removed in the changes to open file syncing in a form that may be more useful for users. LFS_O_SNAPSHOT allows you to open a "snapshot" of a file. This is a cheap, local copy of a file who's changes are not reflected on disk. Internally, snapshot files use the same mechanism as pending writes. A separate, copy-on-write CTZ skip-list is created, with read-only references to the existing data blocks until a write occurs. The difference is that snapshot files are not enrolled in the mlist, meaning they won't get updates from open file syncs, and during close their contents are simply discarded. As an extra benefit, LFS_O_CREAT | LFS_O_SNAPSHOT is equivalent to Linux's O_TMPFILE, making it easy to create temporary, unnamed files. This may be useful for embedded development, where unnamed flash-backed buffers may provide a slower, but larger, alternative to RAM-backed buffers.
This commit is contained in:
		
							
								
								
									
										28
									
								
								lfs.h
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								lfs.h
									
									
									
									
									
								
							| @@ -123,26 +123,30 @@ enum lfs_type { | ||||
| // File open flags | ||||
| enum lfs_open_flags { | ||||
|     // open flags | ||||
|     LFS_O_RDONLY = 1,         // Open a file as read only | ||||
|     LFS_O_RDONLY    = 1,        // Open a file as read only | ||||
| #ifndef LFS_READONLY | ||||
|     LFS_O_WRONLY = 2,         // Open a file as write only | ||||
|     LFS_O_RDWR   = 3,         // Open a file as read and write | ||||
|     LFS_O_CREAT  = 0x0100,    // Create a file if it does not exist | ||||
|     LFS_O_EXCL   = 0x0200,    // Fail if a file already exists | ||||
|     LFS_O_TRUNC  = 0x0400,    // Truncate the existing file to zero size | ||||
|     LFS_O_APPEND = 0x0800,    // Move to end of file on every write | ||||
|     LFS_O_WRONLY    = 2,        // Open a file as write only | ||||
|     LFS_O_RDWR      = 3,        // Open a file as read and write | ||||
| #endif | ||||
|  | ||||
| #ifndef LFS_READONLY | ||||
|     LFS_O_CREAT     = 0x0100,   // Create a file if it does not exist | ||||
|     LFS_O_EXCL      = 0x0200,   // Fail if a file already exists | ||||
|     LFS_O_TRUNC     = 0x0400,   // Truncate the existing file to zero size | ||||
|     LFS_O_APPEND    = 0x0800,   // Move to end of file on every write | ||||
|     LFS_O_SNAPSHOT  = 0x1000,   // Open a temporary snapshot, ignore changes | ||||
| #endif | ||||
|  | ||||
|     // internally used flags | ||||
| #ifndef LFS_READONLY | ||||
|     LFS_F_DIRTY   = 0x010000, // File does not match storage | ||||
|     LFS_F_WRITING = 0x020000, // File has been written since last flush | ||||
|     LFS_F_DIRTY     = 0x010000, // File does not match storage | ||||
| #endif | ||||
|     LFS_F_READING = 0x040000, // File has been read since last flush | ||||
|     LFS_F_READING   = 0x020000, // File has been read since last flush | ||||
| #ifndef LFS_READONLY | ||||
|     LFS_F_ERRED   = 0x080000, // An error occurred during write | ||||
|     LFS_F_WRITING   = 0x040000, // File has been written since last flush | ||||
|     LFS_F_ZOMBIE    = 0x080000, // An error occurred during write | ||||
| #endif | ||||
|     LFS_F_INLINE  = 0x100000, // Currently inlined in directory entry | ||||
|     LFS_F_INLINE    = 0x100000, // Currently inlined in directory entry | ||||
| }; | ||||
|  | ||||
| // File seek flags | ||||
|   | ||||
		Reference in New Issue
	
	Block a user