What happens is: when the fifo deleted while it still held open by one or more process(es), the fifo does remain to exist! You cannot open it again, since it has no name in the filesystem anymore, but it is still there (like a normal pipe) and used by the process(es) as if nothing happened.
Verify this by opening 3 terminals.
- In the first make a fifo: mkfifo /tmp/fifo. Then execute od /dev/urandom >/tmp/fifo (this writes random digits to the fifo contineously).
- In the second terminal run cat /tmp/fifo to read the digits from the fifo.
- In the third terminal delete /tmp/fifo. You will notice how both the reading and the writing process keep running.
If you now kill the writing process, the reading process will still have a valid fifo open: no error occurs.
In your case the process writing to the fifo probably opens and closes the fifo after each string written. The reading process still has a valid (though useless) fifo open and will wait for more.
The same should happen with normal files: when a process has a file open for writing when it is deleted, it will keep it open without an error and will still be able to the file (which nobody will ever see again). Why this did not happen when you tried is a mistery to me. Maybe when using the append flag or so has this effect, or you program has some bug. Hard to say without the code.