linux的fork语句,Linux C/C++——fork()函数基础
#include
#include
#include
#include
int galbol = 6;//定義全局變量
char buf[] = "Hello Linux";//定義一個(gè)字符串
int main(){
int var = 88;//定義一個(gè)局部變量
pid_t pid;//(pid_t 是一個(gè)宏定義,其實(shí)質(zhì)是int 被定義在#include中)
puts(buf);//輸出字符串
pid = fork();//執(zhí)行fork函數(shù)并把返回值賦給pid
if (pid < 0)//如果返回值小于0,則創(chuàng)建失敗
{
printf("error\n");
exit(0);
}
if (pid == 0)//返回值等于0,表示創(chuàng)建成功,是子進(jìn)程運(yùn)行
{
printf("This is children process!\n");
galbol++;
var++;
}
else //如果返回ID就是父進(jìn)程
{
printf("This is parent process\n");
}
printf("pid=%d,ppid=%d,galbol=%d,var=%d\n",getpid(),getppid(),galbol,var);//用來測(cè)試的變量
return 0;
}
運(yùn)行結(jié)果
講解一下運(yùn)行結(jié)果,首先輸出了"Hello Linux!",這是我們放在創(chuàng)建進(jìn)程之前的一個(gè)輸出,接著創(chuàng)建一個(gè)進(jìn)程,返回值是ID,則表明當(dāng)前是父進(jìn)程,接著輸出幾個(gè)變量,當(dāng)前進(jìn)程ID和父進(jìn)程ID,變量galbol和val,由于在父進(jìn)程中沒有對(duì)兩個(gè)變量的值進(jìn)行修改,所以兩個(gè)變量的值未發(fā)生改變。那接下來就是子進(jìn)程,返回值是0,輸出自己是子進(jìn)程,然后執(zhí)行子進(jìn)程的代碼,可以看到子進(jìn)程的pid=5263,父進(jìn)程ID=5983,剛好等于前面父進(jìn)程的ID,并且修改了兩個(gè)變量的值。
5.示例代碼(二)——這次的demo是在父進(jìn)程中打開一個(gè)文本文件,并進(jìn)行讀操作,再看創(chuàng)建的子進(jìn)程能否也讀取與父進(jìn)程一樣的文本文件。
#include
#include
#include
#include
char str[10]; //定義一個(gè)數(shù)組,用來測(cè)試
int main() {
FILE *fp; //fp文件指針
pid_t pid; //進(jìn)程號(hào)
pid = fork();
fp = fopen("a.txt","r"); //以只讀的方式打開文件
if (fp == NULL)
{
printf("Open error!"); //如果指針返回的值為NULL,則打開失敗
exit(0);
}
else
{
if(pid < 0) //fork返回值小于0,創(chuàng)建失敗
{
printf("Error!\n");
exit(0);
}
else if (pid == 0) //fork等于0,返回到新建的子進(jìn)程
{
fread(str,sizeof(char),2,fp); //讀兩個(gè)字符,并輸出到屏幕
puts(str);
}
else //否則返回到父進(jìn)程
{
sleep(2);
fseek(fp,2L,SEEK_SET); //定位到子進(jìn)程讀取的兩個(gè)字符之后開始
fread(str,sizeof(char),3,fp);//讀取三個(gè)字符
puts(str);
}
}
return 0;
}
這是a.txt里面的內(nèi)容
這是運(yùn)行結(jié)果
可以看到,子進(jìn)程打開了與父進(jìn)程一樣的文本文件。
6.總結(jié)一下:使用fork函數(shù)得到的子進(jìn)程從父進(jìn)程處繼承了整個(gè)進(jìn)程的地址空間,包括進(jìn)程上下文、進(jìn)程堆棧、內(nèi)存信息、打開的文件描述符、信號(hào)控制設(shè)置、進(jìn)程優(yōu)先級(jí)、進(jìn)程組號(hào)、當(dāng)前工作目錄、根目錄、資源限制、控制終端等
標(biāo)簽:fork,pid,C++,Linux,進(jìn)程,返回值,include,ID
來源: https://www.cnblogs.com/953-zjf/p/13703716.html
總結(jié)
以上是生活随笔為你收集整理的linux的fork语句,Linux C/C++——fork()函数基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 合富申购是做什么的
- 下一篇: Linux 进程通信fifo,Linux