Q:

¿De qué manera manejo Ctrl-D (EOF) usando getline()?

¿Cómo puedo manejar Ctrl-D (EOF) con getline()? 
He visto que getline() retorna -1 si algo va "mal" incluido que se pulse Ctrl-D hasta ahí todo perfecto, pero tengo que distinguir entre un error "normal" y EOF.
Lo que había pensado es que la variable de error errno seguirá siendo 0 si presiono Ctrl-D por que no es un error para el sistema (ya digo que de esto no estoy seguro).
¿Podría detectarlo de esa forma?

A:

En el manual (man getline) puedes ver esto:

Both functions return -1 on failure to read a line (including
  end-of-file condition). In the event of an error, errno is  set  to 
  indicate the cause.

Por lo que tendrás que comprobar el contenido de dicha variable. Algunos valores los tienes en el manual (man errno), así como la explicación del motivo del valor 0. Puedes consultarlo online aquí:

http://man7.org/linux/man-pages/man3/errno.3.html

For some system calls and library functions (e.g., getpriority(2)), -1
  is a valid return on success.  In such cases, a successful return can
  be distinguished from an error return by setting errno to zero before
  the call, and then, if the call returns a status that indicates that
  an error may have occurred, checking to see if errno has a nonzero
  value.

Si errno vale 0 significa que no hubo ningún error, fue un final de archivo (EOF).
Espero que te sea de ayuda.

