OK, this seems to work:
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
void disable_veof(void) {
    struct termios t;
    int r;
    r = tcgetattr(STDIN_FILENO, &t);
    if(r)
        exit(EXIT_FAILURE);
    t.c_cc[VEOF] = _POSIX_VDISABLE;
    r = tcsetattr(STDIN_FILENO, TCSANOW, &t);
    if(r)
        exit(EXIT_FAILURE);
}
void echo_lines(void) {
    char buffer[4096];
    const size_t buffer_len = sizeof buffer;
    ssize_t bytes;
    while( 0 != (bytes = read(STDIN_FILENO, buffer, buffer_len)) ) {
        bytes = write(STDOUT_FILENO, buffer, bytes);
        if(bytes <= 0)
            exit(EXIT_FAILURE);
    }
}
int main() {
    disable_veof();
    echo_lines();
    return EXIT_SUCCESS;
}