fork与操作文件的系统调用问题
1.打开文件
int open(const char* pathname, int flags)//用于打开一个已存在的文件
int open( const char* * pathname, int flags,mode_t mode);
//用于新建一个文件,并设置访问权限
参数介绍:
pathname:将要打开的文件路径和名称
flags : 打开标志,如 O_WRONLY 只写打开
O_RDONLY 只读打开
O_RDWR 读写方式打开
O_CREAT 文件不存在则创建//注意不要写出错了,据说是当时写内核的人写错了少些个E,所以本来是O_CREATE的变成了现在这样。
O_APPEND 文件末尾追加
O_TRUNC 清空文件,重新写入
mode: 权限 如:“0600”
返回值 :为文件描述符
2.读文件
ssize_t read( int fd, void* buff, size_t count);
参数介绍:
fd 对应打开的文件描述符
buff 存放数据的空间
count 计划一次从文件中读多少字节数据
返回值:为实际读到的字节数
3.写文件
ssize_t write( int fd, const void* * buf, size_t count);
参数介绍:
fd 对应打开的文件描述符
buff 存放待写入的数据
count 计划一次向文件中写多少数据
最后关闭文件close(fd)
4.父进程先打开一个文件,fork 后子进程是否可以共享使用?
代码如下(test.txt的内容为abcdefg):
输出内容为:
发现读出内容是ab。可以确定,父子进程读的是同一个文件,而且用的是同一个偏移量。也就是文件只被打开一次,供父子进程共享使用。
由于 fork 创建的子进程的 PCB 是拷贝父进程的,子进程的 PCB 中的文件表指向打开文件的指针只是拷贝了父进程 PCB 中的值(PCB与进程我们在计算机基础中已经讲了),所以父子进程会共享父进程 fork 之前打开的所有
文件描述符。如下图所示:
5.系统调用与库函数的区别
区别: 系统调用的实现在内核中,属于内核空间;库函数的实现在函数库中,属于用户空间。
我们写的fopen,fwrite这些都是库函数,其内部实现都是利用系统调用open,write。
系统调用执行过程如下图:
fork与操作文件的系统调用问题相关推荐
- Linux C: 文件操作相关的系统调用
一.常见的文件操作相关的系统调用 普通权限的系统调用 函数 说明 int access(char *pathname,int mode) 检查对某个文件的权限 int chdir(const char ...
- 三十四 操作文件和目录
如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操 ...
- 在linux内核中操作文件的方法--使用get_fs()和set_fs(KERNEL_DS)
在linux内核中操作文件的方法--使用get_fs()和set_fs(KERNEL_DS) #include <linux/kernel.h> #include <linux/mo ...
- 内核是如何运行ko文件的--系统调用
内核是如何运行ko文件的–系统调用 文章目录 内核是如何运行ko文件的--系统调用 什么是系统调用 系统调用的流程 向系统中添加一个系统调用 1.在内核源码中添加自己的服务,需要编译进入内核 2.添加 ...
- ASP.NET 如何操作文件
本文由chenyangasp版权所有,可以转载,复制,粘贴,并请注明出处,但不得修改! 在asp.net操作文件的所有concept都在system.io namespace中,这个namespac ...
- VC 文件操作(文件查找,打开/保存,读/写,复制/删除/重命名)
右击项目->属性->字符集:使用多字节字符集. 这样可以使用char到CString的转化. char sRead[20] = ""; CString strtest ...
- python中年大叔学编程_中年大叔学编程-Python简单操作文件
原标题:中年大叔学编程-Python简单操作文件 在计算机中,经常打交道的就是各种文档,用得比较多的软件就是office和记事本来操作文件,那么我们试试用Python来简单读写文件. Open函数的用 ...
- 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) - Zery-zhang
一 基本介绍 操作文档,文件夹,需要用到的类 1 Directory (静态类) : 用于创建.移动和删除等操作通过 目录 和子 目录 DirectoryInfo (非静态): 2 File ...
- c# 操作文件_小练习(音乐播放器)
form排版如图一所示,详细步骤内容请见代码块:这个小练习主要目的是为了更加熟练的掌握Path类和熟练掌握操作文件的方法: using System; using System.Collections ...
最新文章
- Sequence(组合数学,集合不同元素的个数)
- order by居然不能直接在union子句中使用
- 技术 Leader 怎样带跨一个团队?
- 不好意思,你这个加分理由不行……
- linux安装pip
- MTK:内存管理机制简单分析
- svn ignore 命令行用法
- 1.3、TetGen网格化过程之描述
- 实习成长之路:操作系统——CPU有哪些工作模式呢?
- [2018.07.12 T2] B君的第二题
- 根据二次曲面模型法建立区域高程异常拟合模型
- ResNet网络结构
- 深入解析内存原理:DRAM的基本原理
- 图像滤镜艺术---乐高像素拼图特效
- 阿里云上远程连接redis
- C4D倒角应用—样条挤压后如何正确倒角
- 使用滴滴mpx 开发一个小程序组件
- 中国智能手机集成电路(IC)行业市场供需与战略研究报告
- 帝国CMS内容页调栏目名称和栏目地址
- python正则表达式(\S+)和 \d+的含义