一个有趣的题目—linux中的fork函数分析
2012-09-30 10:35
330 查看
首先要介绍一下printf的缓冲机制:printf输出内容时,并不是直接打印到屏幕上,而是先把内容放入到stdout的缓冲队列中。遇到\n或者刷新缓冲等情况时才会输出内容。
看一个小例子:
fork()创建新进程时,会复制旧进程的一切内容,包括缓冲区的内容。因此,如果是printf("hhhh"),hhhh放入到缓冲区中,新进程缓冲区中也会有,结果新旧进程都会输出一次hhhh。而如果是printf("hhhh\n"),直接输出了,不存在于缓冲区中,新进程就不会输出hhhh。
下面看一个经常出现的笔试题目:
会输出几个-?
会输出几个-?
前一个输出6个,后一个输出8个。因为缓冲区的内容也被子进程复制了。
看一个小例子:
#include<stdio.h> #include<sys/types.h> #include<unistd.h> int main() { printf("hhhh"); //printf("hhhh\n"); int pid=fork(); if(pid==0) { printf("I am parent process!\n"); } else if(pid>0) { printf("I am child process!\n"); } else { printf("Errof!\n"); } return 0; }
fork()创建新进程时,会复制旧进程的一切内容,包括缓冲区的内容。因此,如果是printf("hhhh"),hhhh放入到缓冲区中,新进程缓冲区中也会有,结果新旧进程都会输出一次hhhh。而如果是printf("hhhh\n"),直接输出了,不存在于缓冲区中,新进程就不会输出hhhh。
下面看一个经常出现的笔试题目:
#include<stdio.h> #include<sys/types.h> #include<unistd.h> int main() { int i=0; for(i=0;i<2;i++) { fork(); printf("-\n"); } }
会输出几个-?
#include<stdio.h> #include<sys/types.h> #include<unistd.h> int main() { int i=0; for(i=0;i<2;i++) { fork(); printf("-"); } }
会输出几个-?
前一个输出6个,后一个输出8个。因为缓冲区的内容也被子进程复制了。
相关文章推荐
- Linux中fork()函数案例分析
- Linux下进程创建Fork()函数分析
- linux中fork函数的一个小思考
- 一个重写函数的有趣题目
- linux 下的fork,exec 等函数的一个例子
- 通过fork函数创建进程的跟踪,分析linux内核进程的创建
- Linux中fork函数的调用情况分析
- Linux中fork函数分析
- Linux中fork()函数实例分析
- 【Linux/OS/Network】fork函数和vfork函数的分析及区别
- 《第一篇 从linux 0.11系统初始化main.c的fork()函数调用分析内核源码》
- 初识linux chmod命令/函数时我就产生一个有趣疑问:既然chmod可以改变权限, 那即使某用户原来没有某文件的权限, 也可以自己添加权限啊!
- Linux中的fork()函数分析
- Linux中fork()函数实例分析
- 通过fork函数创建进程的跟踪,分析linux内核进程的创建
- Linux 启动代码 Start_kernel()函数分析
- 一个 Linux 上分析死锁的简单方法
- 【题目】:输入一个非负整形数组,其中每个数代表紧挨着的宽为1的墙的高度,输出这些墙之间能积水的体积。函数接口为 int Volume(int * height,int n),要求只能遍历一 遍数组,且
- linux中select()函数分析
- Linux 中的fork()函数