I want to know the difference between "i_size_lo" and "i_size_high"?
According to the linked documentation, "i_size_lo" is the "Lower 32-bits of size in bytes.", while "i_size_high" is "Upper 32-bits of file/directory size".
This means that the total size of the file is 64bits and the value was split between two 32bit fields. To get size of the file, need to do a little math:
uint64_t size = (inode.i_size_high << 32) + inode.i_size_lo