下面这段程序摘抄自The Linux Programming Interface - by Michael Kerrisk
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
printf("hello, world\n");
write(STDOUT_FILENO, "write\n", 6);
if (fork() == -1) {
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
奇妙的地方在于这段程序的执行效果
~/programming/test$ gcc c.c
~/programming/test$ ./a.out
hello, world
write
~/programming/test$ ./a.out > log
~/programming/test$ cat log
write
hello, world
hello, world
~/programming/test$
直接让程序输出到终端和对程序的输出进行重定向产生了不同的结果。这个现象的原因在书里有解释,不过可以自己思考一下。
提示: 这里会用到创建子进程、输出缓冲、进程退出等知识。