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)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括: ...
随机推荐
- shopNC开发手册
链接: https://wenku.baidu.com/view/b9232d24dd3383c4bb4cd2c9.html https://wenku.baidu.com/view/ff1566 ...
- 实现Java程序跨平台运行十二个注意事项
[转自] http://blog.chinaunix.net/uid-20550186-id-1927257.html 使用Java语言编写应用程序最大的优点在于"一次编译,处处运行&quo ...
- VS2015打开特定项目就崩溃
今天在打开之前写的项目的时候,一开vs就崩溃关闭了,打开其他项目的.sln和.vsproj就可以,唯独有1个项目打不开,也不知道为啥,气死了. 去网上找到的解决办法: 步骤1:开始–>所有程序– ...
- cas aqs lock之间的关系
CAS 对应cpu的硬件指令, 是最原始的原子操作 cas主要是在AtomicInteger AtomicXXX类中使用, 用于实现线程安全的自增操作 ++. 对应一个unsafe对象, 根据os平台 ...
- TOJ 3176 Challenge from XOR
Description Mr. AngelClover just learnt XOR on his Computer Class. XOR is a bit arithmetic operator ...
- Distinct 去掉重复 order by
语法: select distinct user from book select * from sdudant order by sex asc,sNo 从表sdudant查找已性别升序排序,性别相 ...
- C#基础知识-引用类型和值类型的区别(六)
在第一篇中我们介绍了C#中基本的15种数据类型,这15种数据类型中又分为两大类,一种是值类型,一种是引用类型.值类型有sbyte.short.long.int.byte.ushort.uint.ulo ...
- Javaweb的get请求乱码解决
get方式请求:即将参数放在URL中,因此这就涉及到URL的编码了 方式一:[推荐] 方式二: 前端编码: encodeURI(encodeURI("")) 后端解码: java. ...
- git每次提交都输入密码
打开gitbash执行即可 git config --global credential.helper store 长期储存密码,因为git默认是不储存密码的,不执行这条命令的话每次更新代码,或者提交 ...
- mybatis简单示例
1.引入mybatis.jar mysql-connector-java-5.1.47.jar <dependency> <groupId>org.mybatis</gr ...
转载▼