关于linux fork()函数的一道题
来源:互联网 发布:nginx 绑定子域名 编辑:程序博客网 时间:2024/04/28 13:50
在linux平台下,看下面两段代码,试分析分别输出几个"-"。
#include<stdio.h>#include<unistd.h>int main(void){ int i; for(i = 0; i < 2; ++i) { fork(); printf("-"); } return 0;}
#include<stdio.h>#include<unistd.h>int main(void){ int i; for(i = 0; i < 2; ++i) { fork(); printf("-\n"); } return 0;}
这道题涉及到的知识点有,printf()函数的理解、"\n"的理解、进程创建与执行的过程、子进程资源与父进程资源关系。
unix上标准输入输出都是带有缓存的,一般是行缓存。对于标准输出,需要输出的数据并不是直接输出到终端上,而是首先缓存到某个地方,当遇到行刷新标志或者该缓存已满的情况下,才会把缓存的数据显示到终端设备上。ANSI C中定义换行符'\n'可以认为是行刷新标志。所以,printf函数没有带'\n'是不会自动刷新输出流,直至缓存被填满。
即:
"\n"是行刷新标识
如果有"\n",则立即输出并清空缓存
如果没有"\n",则等到缓冲区满了后再输出
--------------------------------------------------------------------------------------
第一个函数没有"\n",则输出需等到缓冲区满或进程结束时输出
而子进程是继承父进程的缓冲区的,所以父进程执行printf("-"),一方面给本身缓存增加了一个"-",同时又给其创建的子进程发送了一个"-"
经过分析可知会输出8个"-"
---------------------------------------------------------------------------------------
第二个函数有"\n"
则直接输出,缓冲区置为空,那么子进程继承父进程的缓冲区为空
经过分析可知会输出6个"-"
经过分析可知会输出8个"-"
---------------------------------------------------------------------------------------
第二个函数有"\n"
则直接输出,缓冲区置为空,那么子进程继承父进程的缓冲区为空
经过分析可知会输出6个"-"
图示如下所示:
1 0
- 关于linux fork()函数的一道题
- 一道关于fork的笔试题
- 一道关于fork的笔试题
- 关于fork的一道题目
- 关于linux系统调用fork()的一道面试题
- fork()的一道题
- linux中关于fork函数的使用
- 一道面试题:关于fork的问题
- 一道关于fork()的面试题
- 求解:关于fork的一道题目
- 关于fork()的一道经典面试题
- 关于LINUX中的FORK函数
- 一道关于Linux系统下fork系统调用的面试题
- 一道关于Linux系统下fork系统调用的面试题
- 一道关于Linux系统下fork系统调用的面试题
- Linux fork函数详细图解-同时分析一道腾讯笔试题
- 【Linux】关于理解fork()函数的简单例子
- 一道关于虚函数表的题
- 介绍一下Hibernate的二级缓存
- EBS 开发 如何解决内部开发环境上Subinventory Form上的问题
- hadoop的IO和MapReduce优化参数
- WSAEventSelect模型
- 利用GDI+基于WIN32实现桌面雪花效果(二)
- 关于linux fork()函数的一道题
- jquery.lazyload.js实现图片异步延迟加载
- uva 709 &poj 1093 - Formatting Text (dp之小白告一段落)
- MySQL优化 之 Discuz论坛优化
- 函数指针的用法
- map的collect和spill过程解析
- 运行第一个 Delphi 7/XE2/Lazarus 的 Windows 程序,并熟悉 IDE
- 输入字符数字串输出保存数字串
- 13-Fibonacci数