The kernel has that facility. Open the man page for open(2) and search down to the section name “Synchronized I/O”. A program which wish to display a progress bar can use the open() call with the appropriate argument to get synchronized writes.
That’s for programs that are writing; in this situation the writes have already been completed by the applications and they are sitting in memory waiting to be flushed to the storage devices.
If the OP’s situation is always ‘file copying’ then yes, using a file-copy program that offers sync-write mode would address the issue.