If an application opens a file named File for writing with O_APPEND, then> File in sh will cut the file (ls -l will show it).
Otherwise, the size shown by ls -l will not decrease. However, if the file size (at the moment>) is larger than the file system block size (usually 4 or 8 Kbyte), then du File will show the reduction of the file.
The point is this: When we open a file with a file descriptor, the position in the file with which the recording is being made is connected. It (position) grows with each write (). This data belongs to the process that opened the file. When another process does truncate (), the file size in the file system is definitely reduced (and now the unused data blocks are deleted (more precisely, they are placed on the free list)). However, this does not affect the position of the record in the first process (by the way, even if you do the truncate in it), therefore, with the next write () from the first process, the file length will increase. If at this moment you read the file (for example, cat File> fff from another window), then there will be binary zeros in it (from beginning to last write ()).
Opening a file with O_APPEND modifies the behavior — for each write (), the write position shifts to the end of the file according to its current size in the file system.
I hope this is true for most Unix / Linux. In the emulator did not check.