【发布时间】:2016-11-29 02:19:14
【问题描述】:
在下面的 sn-p 中,无论我输入多长时间(编辑:我正在复制和粘贴随机字符串),比如说一个包含 9998 个字符的字符串,read() 在 i = 4095 时停止. 它声明它读入一个 EOF 字符,但我的字符串没有 EOF 字符(例如,我尝试了一个 9998 'a's 的字符串)。返回值还表明 read() 没有错误。为什么 read() 只读取 4095 字节?
#include <unistd.h>
#include <stdio.h>
int main() {
char temp;
char buf[10000];
int i = 0;
while(read(STDIN_FILENO, &temp, 1) > 0) {
buf[i] = temp;
i++;
}
printf("%d\n", i);
}
编辑:澄清一下,read() 并没有从字面上说明它读取的是 EOF 字符,因为 https://linux.die.net/man/2/read read() 在经过 EOF 时返回 0。
【问题讨论】:
-
"它声明它以 EOF 字符读取," 嗯?你说的“它”是什么?什么是“EOF 字符”?
-
你是如何使用这个程序的?
-
@FrederikDeweerdt 显然如果他在 EOF 中阅读,那么最后一个
printf将不会打印出任何东西 -
@DavidSchwartz 当 read() 读取 EOF 文件字符时,它返回 0。
-
@Cat:我怀疑您的复制粘贴中存在问题(例如,系统级复制缓冲区限制)。尝试将该随机字符串保存到文件中,使用
wc nameoffile检查它的预期长度,然后尝试./foo < nameoffile。