> * Why is it sensible to allow to truncate a file someone has opened?
Because it's not locked.
> * Especially if you don't allow to remove such files?
UNIX doesn't have a "remove file" system call. It has a "remove link" system
call.
> * Or, more specifically, you ALLOW to remove such files, but not to reclaim
> the
> disk space?
Because the space is reclaimed when the last link to the file is removed
and the last process holding the file open closes it.
Operating systems and file systems that don't implement these semantics (YES,
NFS, I'M TALKING ABOUT YOU) are hateful.
> * And how am I supposed to know which process is using the file?
You're not supposed to know. That would be a violation of least privilege. In
a sane network file system (ie, not NFS) the process may not even be on the
same computer.
> For instance, Unix will let you overwrite a shared object used by a process,
> and
> the process will crash. Isn't it *hateful*?
26 ETXTBSY Text file busy. The new process was a pure procedure (shared
text) file which was open for writing by another process, or
while the pure procedure file was being executed an open(2) call
requested write access.
What's hateful is that some versions of UNIX return ETXTBSY on unlink(), and
others allow root to bypass ETXTBSY. And of course NFS doesn't let the OS
know it's got programs on other computers paging from a local text file. But
that's because NFS is a reeking bucket of putrid toxic malignant hate.