cmd=""" # ---------------- # setup as root !! # ---------------- /usr/bin/umount /ram-dir # create ramfs mkdir -p /ram-dir /usr/bin/mount ramfs -t ramfs /ram-dir ## or tmpfs ## /usr/bin/mount tmpfs -t tmpfs -o uid=bob -o gid=bob /ram-disk mkdir /ram-dir/user chown user:user /ram-dir/user dd if=/dev/zero of=/ram-dir/user/x bs=100M count=10 status=progress dd if=/dev/zero of=/ram-dir-x bs=100M count=10 status=progress mount | grep ram-dir # ---------------- """ #print(cmd) import time #fname = "/ram-dir/user/data.bin" #fname = "/media/user/FAT2G-BLACK/data.bin" fname = "/tmp/data.bin" fname = "/tmp/vmaster.bin" data = [-1]*512 debug=1 print(fname) def init_bin(f): f.seek(0) for i in range(len(data)): f.write(b'\x00') f.flash() #bytearray import struct import os def _read(i): f=open(fname,"r+b", buffering=0) r=f.seek(i) v = f.read(1) if v == b'': return None v=struct.unpack('B',v) v=v[0] return v def _init(): if not os.path.isfile(fname): f=open(fname,"w+b", buffering=0) init_bin(f) f.close() print("_init",fname) def _extend(i,xdata=None): if type(xdata) is type(None): ydata = data else: ydata = xdata while i >= len(ydata): ydata.append(-1) if debug:print("binfs extend data",i,len(ydata)) def _write(i,v): f=open(fname,"r+b", buffering=0) f.seek(i) if v < 0: v=0 if v > 255: v=255 v=struct.pack('B',v) f.write(v) f.flush() data_buffer = [] def buffer(i,v=None): try: i = int(i) _extend(i,data_buffer) data_buffer[i] = v except Exception as e: print(e) def update_loop(): while 1: try: for i,v in enumerate(data_buffer): #print("-",i,v) patch(i,v) time.sleep(0.05) except Exception as e: print(e) import _thread as thread def loop(): thread.start_new_thread(update_loop,()) def patch(i,v=None): try: i = int(i) _init() if type(v) is type(None): v = _read(i) elif type(v) is int: if v < 0: v=0 if v > 255: v=255 v2 = _read(i) if v != v2: #print("patch.write",round(time.time(),3),":",[i,v,v2],fname) _write(i,v) #else: # #if "patch" in sys.argv: # # print("x patch.write",round(time.time(),3),":",[i,v,v2],fname) return v except Exception as e: print("patch-err-binfs",e) raise e import random def server(): x = 1 while 1: try: for i in range(200,0,-1): i+=20 if i >= len(data): continue v=data[i] v+=x+i if x > 255: x=0 r=patch(i,v) data[i]=v time.sleep(0.02) time.sleep(10) except Exception as e: print("server-err-binfs",e) time.sleep(1) x += 1 def client(): while 1: try: i=0 v = patch(i) while type(v) is int: _extend(i) if v != data[i]: v2=struct.pack('B',v) print(round(time.time(),3),[i,v,v2]) data[i] = v i+=1 v = patch(i) time.sleep(0.01) except Exception as e: print("client-err-binfs",e,i,len(data)) time.sleep(1) import sys if __name__ == "__main__": print("ARGV", sys.argv) if "server" in sys.argv: server() elif "client" in sys.argv: client() elif "patch" in sys.argv: v = None try: v = int(sys.argv[3]) except Exception as e:pass r=patch(int(sys.argv[2]),v) print(r)