binfs.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. cmd="""
  2. # ----------------
  3. # setup as root !!
  4. # ----------------
  5. /usr/bin/umount /ram-dir
  6. # create ramfs
  7. mkdir -p /ram-dir
  8. /usr/bin/mount ramfs -t ramfs /ram-dir
  9. ## or tmpfs
  10. ## /usr/bin/mount tmpfs -t tmpfs -o uid=bob -o gid=bob /ram-disk
  11. mkdir /ram-dir/user
  12. chown user:user /ram-dir/user
  13. dd if=/dev/zero of=/ram-dir/user/x bs=100M count=10 status=progress
  14. dd if=/dev/zero of=/ram-dir-x bs=100M count=10 status=progress
  15. mount | grep ram-dir
  16. # ----------------
  17. """
  18. #print(cmd)
  19. import time
  20. #fname = "/ram-dir/user/data.bin"
  21. #fname = "/media/user/FAT2G-BLACK/data.bin"
  22. fname = "/tmp/data.bin"
  23. print(fname)
  24. def init_bin(f):
  25. f.seek(0)
  26. for i in range(512):
  27. f.write(b'\x00')
  28. f.flash()
  29. data = [0]*512
  30. #bytearray
  31. import struct
  32. import os
  33. def patch(i,v):
  34. try:
  35. #f=open(fname,"a+b", buffering=0)
  36. f=open(fname,"r+b", buffering=0)
  37. r=f.seek(0) #,whence=os.SEEK_SET)
  38. #f.truncate()
  39. print(r)
  40. r=f.seek(i) #,whence=os.SEEK_SET)
  41. #f.truncate()
  42. print(r)
  43. if v > 255:
  44. v=255
  45. v=struct.pack('B',v)
  46. print("write",round(time.time(),3),":",i,v)
  47. f.write(v)
  48. f.flush()
  49. except Exception as e:
  50. print("server-err",e)
  51. def server():
  52. try:
  53. f=open(fname,"wb", buffering=0)
  54. #f.seek(0)
  55. init_bin(f)
  56. except Exception as e:
  57. print("server-err",e)
  58. time.sleep(1)
  59. print(dir(f))
  60. print(data)
  61. while 1:
  62. try:
  63. f.seek(0)
  64. for i in range(200,0,-1):
  65. i+=20
  66. if i >= len(data):
  67. continue
  68. f.seek(i)
  69. v=data[i]
  70. #print(data)
  71. v+=1+i
  72. if v > 255:
  73. v=1
  74. data[i]=v
  75. #v=bytes(v)
  76. v=struct.pack('B',v)
  77. print(round(time.time(),3),":",i,v)
  78. f.write(v)
  79. f.flush()
  80. time.sleep(0.02)
  81. time.sleep(10)
  82. except Exception as e:
  83. print("server-err",e)
  84. time.sleep(1)
  85. def client():
  86. try:
  87. f=open(fname,"rb", buffering=0)
  88. except Exception as e:
  89. print("client-err",e)
  90. time.sleep(1)
  91. v=''
  92. i=0
  93. while 1:
  94. try:
  95. start = time.time()
  96. f=open(fname,"rb", buffering=0)
  97. i=0
  98. f.seek(0)
  99. v = f.read(1)
  100. while v:
  101. v2=b''
  102. if v:
  103. v2=struct.unpack('B',v)
  104. if v != data[i]:
  105. print(round(time.time(),4),i,v,v2)
  106. data[i] = v
  107. v = f.read(1)
  108. i+=1
  109. time.sleep(0.01)
  110. except Exception as e:
  111. print("client-err",e)
  112. time.sleep(1)
  113. import sys
  114. if __name__ == "__main__":
  115. print("ARGV", sys.argv)
  116. if "server" in sys.argv:
  117. server()
  118. elif "client" in sys.argv:
  119. client()
  120. elif "patch" in sys.argv:
  121. patch(int(sys.argv[2]),int(sys.argv[3]))