【发布时间】:2014-09-12 20:38:45
【问题描述】:
我有一个关于 C 语言 I/O 编程中的缓冲区的问题。
例如,总是说 fwrite 是缓冲 i/o,而 write 是非缓冲 i/o。我的理解是这里的“缓冲”在应用层,我认为在内核级别,它们都有一个缓冲区。从APUE,我看到:
UNIX 系统的传统实现具有缓冲区缓存或 大多数磁盘 I/O 通过的内核中的页面缓存。什么时候我们 将数据写入文件,数据通常由内核复制到 它的一个缓冲区并排队等待稍后写入磁盘。 这称为延迟写入。
我说的对吗?所以我做了一个实验:
int main() {
char *fname = "helloworld";
char content[] = "abcdefg";
int fd = open(fname, O_WRONLY | O_CREAT);
int flag = fcntl(fd, F_GETFL);
flag &= ~O_SYNC;
fcntl(fd, F_SETFL, flag);
write(fd, content, 3);
sleep(100);
return 0;
}
我以为睡眠时应该没有输出,但事实恰恰相反。
是不是我误解了什么?
【问题讨论】: