1try: 2 import uerrno 3 import uos 4except ImportError: 5 print("SKIP") 6 raise SystemExit 7 8try: 9 uos.VfsFat 10except AttributeError: 11 print("SKIP") 12 raise SystemExit 13 14 15class RAMFS: 16 17 SEC_SIZE = 512 18 19 def __init__(self, blocks): 20 self.data = bytearray(blocks * self.SEC_SIZE) 21 22 def readblocks(self, n, buf): 23 # print("readblocks(%s, %x(%d))" % (n, id(buf), len(buf))) 24 for i in range(len(buf)): 25 buf[i] = self.data[n * self.SEC_SIZE + i] 26 27 def writeblocks(self, n, buf): 28 # print("writeblocks(%s, %x)" % (n, id(buf))) 29 for i in range(len(buf)): 30 self.data[n * self.SEC_SIZE + i] = buf[i] 31 32 def ioctl(self, op, arg): 33 # print("ioctl(%d, %r)" % (op, arg)) 34 if op == 4: # MP_BLOCKDEV_IOCTL_BLOCK_COUNT 35 return len(self.data) // self.SEC_SIZE 36 if op == 5: # MP_BLOCKDEV_IOCTL_BLOCK_SIZE 37 return self.SEC_SIZE 38 39 40try: 41 bdev = RAMFS(50) 42except MemoryError: 43 print("SKIP") 44 raise SystemExit 45 46uos.VfsFat.mkfs(bdev) 47 48print(b"FOO_FILETXT" not in bdev.data) 49print(b"hello!" not in bdev.data) 50 51vfs = uos.VfsFat(bdev) 52uos.mount(vfs, "/ramdisk") 53 54print("statvfs:", vfs.statvfs("/ramdisk")) 55print("getcwd:", vfs.getcwd()) 56 57try: 58 vfs.stat("no_file.txt") 59except OSError as e: 60 print(e.args[0] == uerrno.ENOENT) 61 62with vfs.open("foo_file.txt", "w") as f: 63 f.write("hello!") 64print(list(vfs.ilistdir())) 65 66print("stat root:", vfs.stat("/")[:-3]) # timestamps differ across runs 67print("stat file:", vfs.stat("foo_file.txt")[:-3]) # timestamps differ across runs 68 69print(b"FOO_FILETXT" in bdev.data) 70print(b"hello!" in bdev.data) 71 72vfs.mkdir("foo_dir") 73vfs.chdir("foo_dir") 74print("getcwd:", vfs.getcwd()) 75print(list(vfs.ilistdir())) 76 77with vfs.open("sub_file.txt", "w") as f: 78 f.write("subdir file") 79 80try: 81 vfs.chdir("sub_file.txt") 82except OSError as e: 83 print(e.args[0] == uerrno.ENOENT) 84 85vfs.chdir("..") 86print("getcwd:", vfs.getcwd()) 87 88uos.umount(vfs) 89 90vfs = uos.VfsFat(bdev) 91print(list(vfs.ilistdir(b""))) 92 93# list a non-existent directory 94try: 95 vfs.ilistdir(b"no_exist") 96except OSError as e: 97 print("ENOENT:", e.args[0] == uerrno.ENOENT) 98