- 论坛徽章:
- 0
|
楼主可以测试一下下面这段代码,或许就可以明白流与描述符的区别了- #include <stdio.h>
- #include <errno.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <string.h>
- int main(void)
- {
- pid_t pidChild;
- if(write(1, "abcd", sizeof("abcd")) == -1)
- {
- printf("write error:%s\n", strerror(errno));
- exit(0);
- }
- printf("\n");
- printf("a line without \\n");
- /*因为标准输出是行缓冲,所以在printf后面故意不加\n, 这样子进程在复制父进程空间时,也会将这段内容复制到自己的缓冲区了,这样在终端你就看到了2行"a line without \n", 分别是父进程和子进程输出的,而write()的内容只输出一次,那是因为每次write操作都会把数据直接传给内核,不会停留在缓冲区内. printf是对标准输出流stdout进行操作,而write这里是对FILENO_STDOUT文件描述符进行操作*/
- if((pidChild = fork()) == -1)
- {
- printf("fork error:%s\n", strerror(errno));
- exit(0);
- }
- else if(pidChild == 0)
- {
- exit(0);
- }
- printf("\n");
- printf("another line\n");
- exit(0);
- }
复制代码
[ 本帖最后由 zhuhefang2006 于 2008-12-30 11:45 编辑 ] |
|