缓冲
apue里面的8.1示例代码
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int glob = 6;
char buf[] = "a write to stdout\n";
int main(int argc, char const* argv[])
{
int var;
pid_t pid;
var = 88;
if (write(STDOUT_FILENO, buf, sizeof(buf)-1 ) != sizeof (buf)-1){
printf("write error");
exit(1);
}
printf("before fork\n");
if ((pid = fork()) <0){
printf("fork error");
exit(1);
}else if (pid == 0){
glob +=1 ;
var += 1;
}else {
sleep( 2 );
}
printf("pid=%d, glob=%d, var=%d\n", pid, glob, var);
return 0;
}
write是不带缓冲的, printf有. 标准输出重定向到文件时, 会有两行 before fork
他们的文件指针指向的文件表以及文件表中的文件偏移量是一样的, 这样才能保证写的数据不会覆盖.