#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()函数基础相关推荐

  1. linux显示编程语言语句,linux – 如何使用Glade / GtkD和D编程语言显示Hello World

    >安装在Mac,Linux或Windows计算机上编译D语言的DMD编译器.您可以获得有关此here的更多信息. >在Mac,Linux或Windows计算机上安装Glade界面设计器.使 ...

  2. qt执行linux sudo命令语句,linux命令_sudo

    linux命令_sudo 作者:admin sudo === 以其他身份来执行命令 ## 补充说明 **sudo命令** 用来以其他身份来执行命令,预设的身份为root.在`/etc/sudoers` ...

  3. linux的lvcreate语句,linux中使用命令 vgcreate、lvcreate 和 lvextend 管理和创建 LVM

    由于 LFCS 考试中的一些改变已在 2016 年 2 月 2 日生效,我们添加了一些必要的专题到 LFCS 系列.我们也非常推荐备考的同学,同时阅读 LFCE 系列. 在安装 Linux 系统的时候 ...

  4. linux创建目录的语句,Linux的 文件 和 目录 管理(基本语句)

    包括了文件和目录的创建.删除.修改,权限.压缩.搜索.分区.挂载 简单的一些命令: [ pwd ]查看当前所在目录 [ cd .. ]上级目录 [ cd ~ ]当前用户的家目录 [cd -]上次打开目 ...

  5. linux下创建多进程,linux之多进程fork:进程创建

    linux下实现多线程有两种函数调用:一种是通过pthread.h里面已经封装好的函数调用,另一种是通过unistd.h里面的fork函数调用.前面已经已经列举了pthread的使用,下面来书fork ...

  6. Linux创建进程必须fork么,Linux - fork() 创建进程

    Linux - fork() 创建进程 Linux - fork() 创建进程 介绍创建进程之前,先简单地介绍一下 Linux 下的进程内存布局. Stack - 所有函数的 local variab ...

  7. fork原理--Linux实现

    fork的一些特征是怎么实现的? 比如: 1. 为什么父进程返回子进程pid, 子进程返回0? 2. 子进程是如何做到与父进程"一模一样的"? 3. 子进程同父进程一样,都是从调用 ...

  8. linux网络编程之socket:使用fork并发处理多个client的请求

    在回射客户/服务器程序中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现.网络服务器通常用for ...

  9. linux系统sql语句报错_linux之SQL语句简明教程---CREATE VIEW

    视观表 (View) 可以被当作是虚拟表格.它跟表格的不同是,表格中有实际储存资料,而视观表是建立在表格之上的一个架构,它本身并不实际储存资料. 建立一个视观表的语法如下: CREATE VIEW & ...

最新文章

  1. f150platinum_新款福特F150PLATINUM精英版皮卡超强越野实力展示
  2. [开源] C语言项目实战 - 虚拟鼠标 - VirtualMouse
  3. sklearn之pipeline:pipeline的简介、使用技巧、案例应用之详细攻略
  4. vue 父刷新子_父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法...
  5. 编译linux内核分区,Ubuntu编译内核及grub的一些笔记
  6. 监督学习与无监督学习的区别_机器学习
  7. android edittext 正则限制,Android EditText 使用正则表达式进行输入过滤
  8. Swift中文教程(五)控制流
  9. [渝粤教育] 四川大学 新生研讨课 参考 资料
  10. 多个excel工作簿合并_Excel多工作簿合并,只需一个简单的公式搞定
  11. 怎么查看计算机mac地址,怎么查电脑的mac地址?电脑mac地址查询方法
  12. 【2023秋招面经】兴业数金面试总结
  13. u盘,tf卡,MP3,500次就报废了!
  14. Leaving fence domain… found dlm lockspace /sys/kernel/dlm/rgmanager
  15. 查看已删除好友聊天记录
  16. Ubuntu 安装 php8.1
  17. GP232RL直接替代FT232RL串口芯片uart接口
  18. 圆形体癣是什么样子的图片_【圆圈状的癣不痛不痒】_原因_起因-大众养生网
  19. ASP.NET文件后缀名
  20. 如何学习VB最新总结

热门文章

  1. eclipse总是运行上一个程序结果
  2. python有内存处理模块吗_使用Python多处理的高内存使用
  3. Linux安装包deb和rpm格式,deb格式和rpm格式是什么?_网站服务器运行维护
  4. ios 点击出现另外一套tabbar_iOS开发中TabBar再次点击实现刷新效果
  5. 基于IAR-stm32裸板工程,完美移植RT-Thread Nano系统(附源码)
  6. 嵌入式中断服务函数的一些特点
  7. java 最大线程数 设定_Java8 parallelStream 修改默认的线程数量
  8. Standard Template Library标准模板库专项复习总结(一)
  9. CentOS下防御或减轻DDoS攻击方法(转)
  10. AOSCP4.1.2 红米Note 4X 2017/10/13 非官方 稳定发布