fork()请问下面的程序一共输出多少个“A”?多少个-?

题目:请问下面的程序一共输出多少个“-”?

#include 
#include 
#include 
int main(void) 
{ 
int i; 
for(i=0; i<2; i++){ 
fork(); 
printf("-"); 
} 
return 0; 
}                    

解析:一共输出8个。
首先程序一开始,bash产生一个进程P1执行此程序,P1进入程序。
当i=0时:
fork()产生一个子进程P2,同时它自己输出一个’-’。P2继承P1的诸如环境变量,P2首现会输出一个’-’。
当i=1,会继续执行for循环—P2先fork()出一个子进程P3,同时再输出一个’-’。
P3进程为P2的子进程,它会复制其父进程P2的指令,变量值,程序调用栈,环境变量,缓冲区等,它会输出一个’-’。
此时P1进入程序后,当i=1时,fork()产生另一个它的子进程P4,同时输出一个’-’。P4同样会输出一个’-’。
我们正常分析觉得应该产生6个’-’。
这是因为printf(“-”);语句有buffer,所以,对于上述程序,printf(“-”);把“-”放到了缓存中,在fork的时候,缓存被复制到了子进程空间,所以,就多了两个,就成了8个,而不是6个。
因为这里P3会继承P2的缓冲区,其中有一个’-’,所以P3会输出两个’-’。
因为P4为P1的一个子进程它会继承P1的缓冲区,其中有一个’-’,所以P4会输出两个’-’。
若将程序改为:

#include 
#include 
#include int main(void)
{int i;for (i = 0; i<2; i++){fork();printf("-\n");}return 0;
}

则输出六个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 常用集合算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> #include <vector> #include <iterator> using namespace std;/* set_intersection算法 求两个set集合的交集 注意:两个集合必须是有序序列 param beg1 容器1开始迭代器 par…

本能富可敌国,最后却选择拯救世界!Bram的Vim和乌干达儿童

他本能富可敌国&#xff0c;最后却选择拯救世界 在命令行界面输入vim会出现一堆文件&#xff0c;但是一直有这么一句话 Help poor children in Uganda! “帮助可怜的乌干达儿童” 查询了一下这里面相关的历史背景和知识 在Vim许可证文件结束后的部分翻译 &#xff0d;如果…

linux 常用命令01

/bin/bash 就是linux默认的shell ls命令 ls -a 显示所有文件 包含隐藏文件 ls -R 递归显示子目录 ls -l 显示详细信息 ls -lrt 按照时间排序&#xff0c;显示文件信息 配合通配符使用 ls *.c *匹配任意多个字符 ls xx.? 匹配任意一个字符 cd 命令 cd - 为切换到上次目录 cd 回…

Linux基础查漏补缺

文章目录第二遍重新回顾Linux基础查看主机名修改主机名查看IP地址Linux的 “--”和“-”根目录文件的意义和作用alias直接在命令行界面输入firefox数组越界发生什么命令行光标移动的几个操作重定向第二遍重新回顾Linux基础 1.查找忽略的知识点 2.再次记忆一些基础知识 3.巩固基…

linux 常用命令02--文件属性 以及软硬链接

文件属性和用户用户组 通过ls-l 显示文件详细信息 drwxrwxr-x 2 user usergroup 4096 10月 30 20:55 stu1drwxrwxr-x d代表目录文件&#xff0c; -代表普通文件 rwx rwx r-x 归属用户的权限 归属组的权限 其他用户的权限 权限位数字表示法(8进制数…

linux查漏补缺之常用命令

wc命令 -c, --bytes, --chars输出字节统计数。-l, --lines输出换行符统计数。-L, --max-line-length输出最长的行的长度。-w, --words输出单词统计数。grep命令 图解

linux 常用命令03--修改文件的权限与归属

chmod 命令 改变文件权限 第一种&#xff1a; chmod [u|g|o|a] [|-] [r|w|x] filename 比如&#xff1a; chmod ux filename 给所属用户增加执行的权限第二种&#xff1a; 给a.out 文件&#xff0c;所属用户可读可写&#xff0c;所属组可读可写&#xff0c;其他的读 chmod 06…

思维导图:面试小结

文件&#xff1a;思维导图

linux 常用命令04 查找和检索

先说一下 文件的基本类型 文件类型 l 符号链接文件&#xff08;软连接&#xff09; b 块设备 &#xff08;磁盘文件&#xff09;c 字符设备p 管道设备&#xff08;pipe&#xff09;s 本地套接字&#xff08;网络编程&#xff09;- 普通文件 用find命令的时候&…

linux 常用命令05 常用的压缩与解压缩文件

zip/unzip ----zip格式 使用方式&#xff1a;zip -r 压缩包名 原材料 -r代表递归子目录 原材料可以有多个 例如&#xff1a;zip -r bb.zip bb hello 对应的解压缩&#xff1a;unzip bb.zip .gz格式的压缩包 gzip和gunzip tar 最常用打包工具 .tar.gz tar相应参数介绍 -c 压缩…

apt-howto

https://www.debian.org/doc/manuals/apt-howto/index.zh-cn.html#contents

Linux系统监控shell脚本

开源项目 https://github.com/atarallo/TECMINT_MONITOR #! /bin/bash # unset any variable which system may be usingunset tecreset os architecture kernelrelease internalip externalip nameserver loadaveragewhile getopts iv name docase $name ini)iopt1;;v)vopt1…

linux ubuntu 软件安装的三种方式

apt-get 自动安装软件&#xff0c;解决依赖关系 sudo apt-get update 更新源 源在 /etc/apt/sources.list 文件中sudo apt-get install softwarename sudo apt-get remove softwarenamedpkg 根据deb安装包来安装软件 dpkg 是“Debian Packager ”的简写 sudo dpkg -i xxx.de…

linux 用户管理以及其他命令

设置用户组 sudo groupadd test 增加test用户组创建用户 选项&#xff1a; -s 指定shell -g 指定组 -d 用户家目录 -m 家目录不在时&#xff0c;自动创建 sudo useradd -s /bin/bash -g test -d /home/newuser -m newuser设置密码 sudo passwd newuser切换用户 su xiaowan…

蒙特卡洛法求圆周率100亿数据

代码 import time import random hits0 pi0 DARTS100000*100000 starttime.perf_counter() for i in range(DARTS):x,yrandom.random(),random.random()distpow(x ** 2y**2,0.5)if dist < 1.0:hits1 pi4*(hits/DARTS) print("圆周率的值是{:.10f}".format(pi)) p…

linux gcc 简单使用记录01

大体编译流程 gcc 参数&#xff1a; I 包含头文件路径 L 包含库文件路径 l 库名 比如libxxx.so 对应着 -lxxx(掐头去尾) O 优化选项 1&#xff0c;3 W 警告 all 显示更多的 c 编译成 .o 文件&#xff08;二进制&#xff09; E 输出到标准输出&#xff0c;宏替换&#xff0c…

No module named 'Tkinter'

sudo apt install python3-tk这一句就搞定了。网上长篇大论也真是醉了

Linux gcc 制作静态库01

制作步骤 编译为 .o 文件 createliba目录下 结构为 ├── head │ └── test.h ├── jia.c ├── jian.c ├── cheng.c ├── chu.c 这4个源文件&#xff0c;提供 - * /算数运算&#xff0c; 使用了 head目录下 test.h文件 先编译为.o文件 gcc -c *.c -I./head l…

Ubuntu 18的中文界面切换《图解教程》亲测成功

然后找到Chinese simple 把汉语挪到第一行

linux gcc 制作动态库

编译与位置无关的代码&#xff0c;生成.o&#xff0c;关键参数 -fPIC createlibso目录下 ├── cheng.c ├── chu.c ├── head │ └── test.h ├── jia.c └── jian.cgcc -fPIC -c *.c -I ./head在createlibso目录下生成 与位置无关的.o文件 ├── cheng.c ├…