我只是想知道如何getchar()实施?是不是像下面这样?单字节这样读取效率相当低。它使用一些缓冲吗?
伪代码:
int getchar() {
char buf[1];
int n = read(0, buf, 1);
if(n < 1)
printf("Read failed");
return buf[0];
}
Run Code Online (Sandbox Code Playgroud)
考虑到标准 C 库的实现数量,不可能提供明确的答案,但最常见的实现似乎遵循相同的一般准则。
根据定义,getchar()使用标准 C 库 ie 的流基础结构FILE及其友好的函数。在大多数现代 C 库实现中,文件流会进行一定程度的缓冲,缓冲区大小和行为通常可以通过setvbuf().
我知道至少一种情况(glibc),文件可以选择 - 通过额外的选项- 通过内存映射(即)而不是/fopen()进行访问。为了避免与调用更高级别的函数(例如 )混合时出现问题,被迫使用相同的缓冲结构。mmap()read()write()scanf()getchar()
如果没有来自探查器的信息,我会更担心使用的任何代码的结构复杂性,getchar()而不是由其使用引起的任何性能问题。
| 归档时间: |
|
| 查看次数: |
6564 次 |
| 最近记录: |