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