2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > linux的fork语句 Linux C/C++——fork()函数基础

linux的fork语句 Linux C/C++——fork()函数基础

时间:2021-08-10 18:46:01

相关推荐

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

来源: /953-zjf/p/13703716.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。