如果您正在以规范模式从终端读取线路,是否有任何方法可以区分以EOL(回车)和EOF(Ctrl-D)终止的线路?我的理解是两者都将返回从read()读取的字节数。
答案 0 :(得分:2)
对于空行的EOL,换行符的字节数为1。
对于空行的EOF,字节数将为0,因为没有更多的数据'。
答案 1 :(得分:1)
查看最后读取的字符(除非没有读取字符,在这种情况下你有一个EOF)。
int nr = read(0, buffer, sizeof buffer);
if (nr > 0) {
if (buffer[nr - 1] == '\n')
{ /* EOL typed */ }
else if (nr == sizeof buffer)
{ /* Filled the buffer */ }
else
{ /* Probably an EOF was typed, not at the start of a line */ }
else if (nr < 0)
{ /* handle error */ }
else
{ /* EOF */ }