IPC The sleeping barber problem in C feedback
readline

buf is a pointer. sizeof(buf) is either 8 or 4, depending on the architecture. bzero(buf,sizeof(buf)); only clears 8 (or 4) bytes of the buffer.

Similarly, sizeof(strlen(fd.BUF)) is equal to sizeof(int), and 256 - sizeof(strlen(fd.BUF) always evaluates to 252, regardless of the fd.BUF contents. Doesn't look right, and may lead to a buffer overrun.

Looking for '\n' in fd.BUF may degrade the performance. Looking for it in temp would be faster (because temp is smaller).

I don't see why do you need temp at all. It only introduces an extra copy. You may read directly to fd.BUF.

strcpy(fd.BUF,fd.BUF+mv) is very dangerous, and technically introduces an undefined behaviour: strcpy is declared as
  cher * stpcpy(char * dst, const char * src);

The const states a contract, that the source string is not modified. You invocation violates the contract.