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.pswp.cn/news/382551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382551.shtml
英文地址,請注明出處:http://en.pswp.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 ├…