使用文件描述符而不是文件指针的 getline()
getline() with a file descriptor instead of a file pointer
据我所知,没有与 getline()
等效的 libc 可以使用文件描述符而不是使用 FILE *
。
这有(技术)原因吗?
您可以使用 fdopen
.
从文件描述符创建 FILE 流
要从文件描述符中获取一行,您需要一次向 OS 询问一个字符,这是非常低效的。 (POSIX shell 中的 read
内建函数是这样工作的——它通过一次检索一个字节来非常低效地读取行。)
FILE 流从 OS 批量请求数据,这提高了效率,但是文件描述符可能不是可倒带的文件——它可能是套接字或管道,如果您请求 100 个字符并且那 100 个批次的第三个字符是换行符,那么就没有办法一般地撤消对它之后的 97 个字符的读取。
据我所知,没有与 getline()
等效的 libc 可以使用文件描述符而不是使用 FILE *
。
这有(技术)原因吗?
您可以使用 fdopen
.
要从文件描述符中获取一行,您需要一次向 OS 询问一个字符,这是非常低效的。 (POSIX shell 中的 read
内建函数是这样工作的——它通过一次检索一个字节来非常低效地读取行。)
FILE 流从 OS 批量请求数据,这提高了效率,但是文件描述符可能不是可倒带的文件——它可能是套接字或管道,如果您请求 100 个字符并且那 100 个批次的第三个字符是换行符,那么就没有办法一般地撤消对它之后的 97 个字符的读取。