ZT 父子进程共享文件描述符
#include <stdio.h>
#include
<fcntl.h> //包含O_RDONLY等宏定义
int main(void){
char test;
int fd;
if((fd = open("test.dat",O_RDONLY))==
-1)
{
perror("Can't open file test.dat\n");
return 1;
}
printf("Open file succeed.\n");
if(fork()==-1)
{
perror("Can't creat child
process.\n");
return 1;
}
printf("Creat child process succeed.\n");
read(fd,&test,1);
printf("Process ID: %ld read the character:%c\n
",(long)getpid(),test);
close(fd);
return 0;
}
test.dat内容:abcdefghijklmn
open函数返回的是一个整型的文件描述符信息,该文件描述符也可以用于read,write,fcntl,lseek等系统函数中。
如果一个进程打开了一个文件以后,创建子进程,子进程会继承父进程的环境和上下文中的大部分内容,包括文件描述符。此时父子进程享有相同的文件偏移量,执行相同的程序读取文件中的字符。程序执行结果是随机的,可能是父进程先读,产生一个偏移,再由子进程读其相邻字符,也可能结果相反。
以下是该程序的一种执行结果:
root@gaolu-desktop:/home/gaolu#
root@gaolu-desktop:/home/gaolu#
gcc -o fork_file fork_file.c
root@gaolu-desktop:/home/gaolu#
root@gaolu-desktop:/home/gaolu#
root@gaolu-desktop:/home/gaolu#
root@gaolu-desktop:/home/gaolu#
root@gaolu-desktop:/home/gaolu#
./fork_file
Open file succeed.
Creat child process succeed.
Process ID: 6197 read the
character:a
//子进程先读到字符a
Creat child process succeed.
Process ID: 6196 read the character:b
ZT 父子进程共享文件描述符的更多相关文章
- fork()父子进程文件描述符的关系
父子进程共享文件描述符:此说法,其实是父子进程共享 文件表项(父进程和子进程共享同一个file table entry) 由于子进程是父进程的拷贝,子进程会拷贝父进程的进程描述符中的文件描述符表,可以 ...
- UNIX高级环境编程(2)FIle I/O - 原子操作、共享文件描述符和I/O控制函数
引言: 本篇通过对open函数的讨论,引入原子操作,多进程通信(共享文件描述符)和内核相关的数据结构. 还会讨论集中常见的文件IO控制函数,包括: dup和dup2 sync,fsync和fdatas ...
- fork后父子进程文件描述问题
[fork后父子进程文件描述问题] 一张图可以浅析的解释: 参考:http://wenku.baidu.com/view/dd51581bff00bed5b9f31d8e.html
- 进程—内存描述符(mm_struct)
http://blog.csdn.net/qq_26768741/article/details/54375524 前言 上一篇我们谈论了task_struct这个结构体,它被叫做进程描述符,内部成员 ...
- Linux进程管理描述符 task_struct
转:http://blog.csdn.net/hongchangfirst/article/details/7075026 大家都知道进程,可是知道linux是怎么管理其进程的吗?每一个进程都有一个进 ...
- Python mutilprocessing Processing 父子进程共享文件对象?
multiprocessing python多进程模块, 于是, Processing也是多进程的宠儿. 但今天讨论的问题, 似乎也能引起我们一番重视 直接上代码: 1 2 3 4 5 6 7 ...
- fork()系统调用后,对于open()前后父子进程的访问
一开始我也不是很懂,后来看了一篇别人的博客觉得写得特别好,现在拷贝下来分享一下. 如果换成write函数 如果换成write函数,先open()后fork(),那么父子进程共享文件描述符,即使在子进程 ...
- Linux 进程间传递文件描述符
文章目录 文件描述符 文件数据结构 共享文件 UNIX域socket实现传递文件描述符 进程间传递打开的文件描述符,并不是传递文件描述符的值.先说一下文件描述符. 文件描述符 对内核来说,所有打开的文 ...
- [转] linux系统文件流、文件描述符与进程间关系详解
http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括: ...
随机推荐
- 我所理解的session_set_save_handler的执行顺序机制
默认的session handler启动顺序 <?php ini_set('session.gc_maxlifetime',10); ini_set('session.gc_probabilit ...
- PIXI 精灵及文本加载(4)
预习下官网的知识. 及字母消除接上文 Pixi 精灵 Pixi拥有一个精灵类来创建游戏精灵.有三种主要的方法来创建它: 用一个单图像文件创建. 用一个 雪碧图 来创建.雪碧图是一个放入了你游戏所需的所 ...
- maven入门与常用插件使用
maven不仅仅是一款管理jar包的工具,还可以
- java将文本写入本地硬盘
注意:首先要在E盘创建qaz.txt文本文件.然后执行代码写入. public static void main(String[] args) { SecurityCodeUtils scu = ne ...
- nginx 服务器配置文件指令
localtion 配置 语法结构: location [ = ~ ~* ^~ ] uri{ ... } uri 变量是带匹配的请求字符, 可以是不含正则表达的字符串, ...
- GreenPlum 大数据平台--外部表(三)
一,外部表介绍 Greenplum 在数据加载上有一个明显的优势,就是支持数据的并发加载,gpfdisk是并发加载的工具,数据库中对应的就是外部表 所谓外部表,就是在数据库中只有表定义.没有数据,数据 ...
- select简单示例,有注释
全部都在代码中: import select import socket import queue """ 简单的select 实现echo server 个人理解: s ...
- (转)超全整理!Linux性能分析工具汇总合集
超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...
- 安装clouderamaner时出现Failed to detect distribution错误(在ubuntu14.04版本里)
不多说,直接上干货! 在安装过程中,本来我的ubuntu系统都是14.04的. 问题详情 问题查看 解决办法 然后,再次执行安装即可. 欢迎大家,加入我的微信公众号:大数据躺过的坑 人 ...
- 给python解释器本身添加注册表
import sys from _winreg import * # tweak as necessary version = sys.version[:3] installpath = sys.pr ...