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;

}

运行结果

cb2c216d48a225445fa528c54c5b4e4c.png

讲解一下运行结果,首先输出了"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里面的内容

53bf4b5a6be2c74613f6985db534a598.png

这是运行结果

6429fdeeab89050dae2a3daeedad0f2c.png

可以看到,子进程打开了与父进程一样的文本文件。

6.总结一下:使用fork函数得到的子进程从父进程处继承了整个进程的地址空间,包括进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等

标签:fork,pid,C++,Linux,进程,返回值,include,ID

来源: https://www.cnblogs.com/953-zjf/p/13703716.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值