进程创建fork–文件表项继承
子进程继承父进程的文件描述表,不继承共享文件表项和iNode。
父进程创建一个子进程后,文件表项中的引用计数器加1变为2,当父进程操作close操作后,计数器减1,子进程还是可以使用文件表项,只有当计数器为0时,才会释放文件表项。

#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>/*
*
*  在父进程中将文件定位到结尾处,在子进程中追加文本
*  ./fork_file forkfile.txt  XXXXX
*
*/int main(int argv, char *argc[])
{int fd;pid_t pid;char *buf;if(argv < 3) {printf("argv is wrong.....\n");return -1;}fd = open(argc[1], O_WRONLY);buf = argc[2];printf("buf: %s\n", buf);pid = fork();if (pid < 0) {printf("fork fail.\n");return -1;} else if (pid > 0) {lseek(fd, 0, SEEK_END);} else {sleep(3);/* 此处的fd为子进程继承(复制)父进程的文件描述符,与父进程中不是同一个,但是内容指向是相同的*/printf("write buf: %s\n", buf);if (write(fd, buf, strlen(buf)) != strlen(buf)) {printf("write buf to fd fail. len_buf:%ld\n", strlen(buf));return -1;}}/* 此处之后的代码会执行两遍,父进程和子进程各一遍 */sleep(2);printf("pid: %d finish.\n", getpid());close(fd);return 0;
}

运行结果:
root@spark# ./fork_file forkfile.txt ccccc
pid: 3172 finish.
write buf: ccccc
pid: 3173 finish.
root@spark#

进程创建fork--文件表项继承相关推荐

  1. linux文件 i节点结构,Linux 文件描述符 文件表项 i节点结构

    Linux的VFS(虚拟文件系统)学习起来很痛苦,看源码不太明智,看完分析完就忘且太浪费时间,懂了后也无法应用在实际场合中.所以这里只是讨论下文件描述符,文件表项(file结构体)和inode,理清实 ...

  2. Linux进程创建fork、进程退出exit()、进程等待waitpid()

    虽然通过标题,我们就轻易的知道了这三个函数的作用,可是,你真的了解这几个函数码?下面让我们来看看这三个函数到底有什么! 一.进程创建fork() 首先,我们来看一看fork()的函数声明: #incl ...

  3. 大文件表空间+创建大文件表空间+查询数据库表空间类型信息+查询数据库表空间类型信息...

    1用于解决存储文件大小不够的问题 2与普通表空间不同的地方在于大文件表空间只对应唯一一个数据文件或临时文件,普通表空间可最多1022个数据文件或临时文件 3大文件表空间对应文件可达4G个数据块大小,普 ...

  4. 到底什么时候创建的ARP表项

    一周前遇到一个问题,比较简单但值得推敲.到底什么时候创建arp邻居项呢?是在查路由的时候呢,还是在实际走路由的时候?   我们知道,在2.6.32的内核里,在查路由操作的最后,会有一个arp bind ...

  5. 【Linux】——进程创建fork()详解

    文章目录 一.fork()作用 二.fork()特性 1.父子进程之间的关系 2.父子进程返回情况 3.父子进程执行情况 4.父子进程的存储空间 5.父进程把存储空间拷贝给子进程的时机和方式 5.1写 ...

  6. Python进程学习笔记-进程创建fork

    1. 进程 VS 程序 编写完毕的代码,在没有运行的时候,称之为程序 正在运行着的代码,就成为进程 进程,除了包含代码以外,还有需要运行的环境等,所以和程序是有区别的. 2. fork( ) Pyth ...

  7. python中进程创建—fork()

    导入模块:import os 1.程序执行到os.fork()时,操作系统会创建一个新的进程(子进程),复制父进程信息 2.子进程从fork()函数中得到返回值零 3.父进程从fork()函数中得到返 ...

  8. python 多进程 调用模块内函数_进程创建fork()和multiprocessing模块Process类

    一.进程VS程序 一个人穿上军装去打仗就是战士,战士需要武器.战场等资源.一个人去种田就是农民,农民需要土地.锄头等资源. 编写完毕的代码,安静的呆在磁盘上,称之为程序.代码要运行就得加载到内存,正在 ...

  9. ftp关键技术二:nobody进程创建和使用(一)

    本文将从以下几个方面具体阐述nobody进程的前世今生 为什么需要nobody进程? 进程间通信的协议制定 为什么需要nobody进程 (1)为什么要使用nobody进程和服务进程两个进程? ​ 1. ...

最新文章

  1. yolov5 onnx
  2. 第五章Bookstrap
  3. SAP的模块化服务应用市场Hybris,前景如何?
  4. python 报ImportError: Install xlrd = 1.0.0 for Excel support错误
  5. 为什么新手开车起步总是熄火
  6. 气动调节阀基本结构图
  7. SVN: repository browser 库浏览器
  8. Java中J.U.C扩展组件之Fork,join
  9. 2019年2月22日 深入理解计算机系统(CS:APP)第一章读书笔记
  10. 【转】浅论ViewState及其与Session的关系
  11. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_12_常用的函数式接口_Predicate接口...
  12. mysql5.6二进制包_MySQL 5.6版本二进制包多实例安装
  13. 解决“DNS_PROBE_FINISHED_NXDOMAIN”,访问网站打不开问题
  14. dex2jar源码解析----解析dex文件一
  15. 两个独立同分布的指数分布相加服从什么分布
  16. Mysql int(10) int(11) 字符长度的设置
  17. 拉格朗日乘数求极值方法
  18. 阅读赵炯的《Linux内核完全注释》之前必须知道的!
  19. javaWeb重定向
  20. VB.NET生成随机串或随机数字的方法

热门文章

  1. table 鼠标移上去改变单元格边框颜色。
  2. 纯CSS3美化单选按钮radio
  3. 纯css隐藏移动端滚动条解决方案(ios上流畅滑动)
  4. 阅读react-redux源码(六) - selectorFactory处理store更新
  5. TCP多进程并发服务端 Linux socket编程入门(2)
  6. Flash中的SLC/MLC/MLC--基础
  7. POJ 1944 Fiber Communications (枚举 + 并查集 OR 线段树)
  8. php 复制行,phpstorm怎么快速复制当前行?
  9. aix 卸载mysql_AIX 删除数据库及集群软件
  10. MATLAB飞机大战第二版,windows程序设计——飞机大战札记(单文档文件登陆界面)...