If you really mean concurrent in the sense of parallel, this would be possible with threads.
Since the buffer is then a critical resource, it is necessary to synchronize here.
Rick's suggestion to first fill the array buf[] until buf[] is full or the read is canceled seems to be the much easier way without these problems.
Instead of while you could write something like this:
int i, r=1;
for(i=0; (i < sizeof(buf)) && (r >0); i++)
r = read_bytes(fd, &buf[i], 1));
write(stdout, buf, i);
write_line(fdout, buf i);
Notes:
1. I would recommend not to hardcode the first parameter 1 in write, but to write stdout instead
2. Writing single bytes is very unperformant. Shouting multiple bytes would be better.