【问题标题】:How to partially read input until a new line using read()?如何使用 read() 部分读取输入直到换行?
【发布时间】:2022-01-25 15:09:02
【问题描述】:

我正在尝试部分读取输入,直到输入新行“\n”。但是如何使用 read() 函数来做到这一点?现在我已经进行了部分读取,直到终端界面注销并停止输入(在linux终端上按 ctrl+d ),但不知道如何在输入新行时停止。这是我的代码:

int fd = 0;
const size_t read_size = 100;
size_t size = read_size;
char *buff = malloc(size+1);
size_t offset = 0;
size_t res = 0;

while((res = read(fd, buff + offset, read_size)) > 0)
{
    offset += res;
    buff[offset] = '\0';
    if (offset + read_size > size)
    {
        size *= 2;
        buff = realloc(buff, size+1);
    }
}
return buff;

【问题讨论】:

  • 为什么不用fgets函数?
  • 我在操作系统级别工作,所以只使用读取、写入、打开、关闭、lseek 等。它的部分读取因为它更快

标签: c input buffer


【解决方案1】:

我正在尝试部分读取输入,直到输入新行“\n”。但是如何使用 read() 函数做到这一点?

使用read 实现此目的的唯一方法是一次读取一个字符。读完 '\n' 字符后,停止。

如何检查正在阅读的内容?

while (read(fd, buf + offset, 1) == 1) {
  if (buf[offset] == '\n') break;
  offset += 1;
}

【讨论】:

  • 也可以通过缓冲输入来实现,作为块读取。
  • 好的,但是如何检查正在阅读的内容?
  • @User_Not_Found 我已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
相关资源
最近更新 更多