有没有办法在规范模式中区分EOL和EOF?

时间:2015-01-23 03:57:44

标签: c unix io terminal

如果您正在以规范模式从终端读取线路,是否有任何方法可以区分以EOL(回车)和EOF(Ctrl-D)终止的线路?我的理解是两者都将返回从read()读取的字节数。

2 个答案:

答案 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 */ }