第十章I/O
系统级i/o
开始进程时的三个标准:
标准输入(描述符0):STDIN_FILENO
标准输出(描述符1):STDOUT_FILENO
标准错误(描述符2):STDERR_FILENO
文件位置:
从文件开头起始的字节偏移量k。应用程序能够通过执行seek操作,显式设置文件当前位置
open函数参数 :
基本格式:open(char *file, int flags,mode_t mode)
file:
文件名带双引号表示
flags:
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
mode:
指定新文件的访问权限位,与后面的umask函数互用定义,在创建新文件利用
umask:
在打开文件前使用函数umask(umask)进行设置,参数可以先定义
返回值:
所在描述表的位置数值(int),出错为-1
注意事项:
可以定义各项参数值,只要带有头文件即可,具体实例后面练习有参考
read and whrite读和写文件:
基本格式:read/write(int fd,const void *buf, size_t n)
fd:
源文件的描述符
n:
拷贝最多n个字节
buf:
目标存储器位置
返回:
若成功则为实际传送的字节数量;-1表示错误;0表示EOF
特别情况:
读时遇到EOF:不足值表示为0
从终端读文本行:行不足值等于文本行大小
读和写网络套接字:网络不足值表示
RIO包健壮包利用:
RIO包会自动处理不足值。RIO提供了两类不同的函数:
1 无缓冲的输入输出函数:
这些函数直接在存储器和文件之间传送数据,没有应用级缓冲,他们对将二进制数据读写到网络和从网络读写二进制数据尤其有用
2 带缓冲的输入函数:
这些函数允许你高效地从文件中读取文本行和二进制数据,这些文件的内容缓存在应用级缓冲区内,类似于像printf这样的标准I/O函数提供的缓冲区。
是线程安全的,它在同一个描述符上可以被交错地调用。例如,可以从一个描述符中读一些文本行,然后读取一些二进制数据,接着再多读取一些文本行。
stat/fstat读取文件元数据
基本格式:int stat(const filename, struct stat buf)/ int fstat(int fd, struct *buf);
stat以文件名为输入,fstat以文件描述符为输入
返回:成功为0;出错为-1
共享文件
父子进程共享文件:子进程会有一个父进程描述符表项的副本,父子进程打开相同的文件表集合,共享相同的文件位置。在内核删除相应的文件表表项之前,父子进程都必须关闭相应的描述符表项。
文件表:当前文件位置,引用计数(当前指向该表项的描述符项数),以及一个指向V-node表对应表项的指针
v-node表:包括st_mode和st_size成员
重定向
dup2函数:
基本格式:int dup2(int oldfd,int newfd)
功能描述:dup2函数拷贝描述符表表项oldfd到描述符表表项newfd,覆盖描述表表项newfd以前的内容。如果newfd已经打开,dup2会在拷贝oldfd之前关闭newfd
注意事项:在调用函数时旧文件没有引用
练习:
练习1

练习2:


练习3:

练习5:


练习总结:
实验操作全是文件操作函数,要利用文件的创建的基础上完成操作
实验的参数格式要标准
练习依赖于以往学习的堆栈
练习遇到的问题以及解决的方法:
问题:没有头文件,或头文件错误
方法:练习的头文件并没有被复写,可以自己加入一些必要的头文件或者自己复写头文件
参考资料:
课本
第十章I/O的更多相关文章
- 读《编写可维护的JavaScript》第九、十章总结
第九章 将配置数据从代码中分离出来 9.2 抽离配置数据 这章比较好理解,也非常常见,作者给的俩个例子就能说明一切: // 将配置数据藏在代码中 function validate(value) { ...
- 0526 Sprint1个人总结 & 《构建之法》第八、九、十章
Sprint1的个人总结: 我是老人组的成员,我们是做一款四则运算训练的软件.然后我是接了界面设计的任务,所以我任务将会是sprint1中相对重一点的一方.我的感觉是,界面要做得充满童趣,毕竟我们的软 ...
- Getting Started With Hazelcast 读书笔记(第八章-第十章)
第八章到第十章就是一些介绍性的描述,吹的就是Hazelcast能使用在各种地方.. 第八章 -从外面看 1.Hazelcast做了一个memcache的java实现,方便py和php使用. 2.可 ...
- 第十章 MySQL 常用函数
第十章 MySQL 常用函数 第一节:日期和时间函数 1,CURDATE() 返回当前日期:2,CURTIME() 返回当前时间:3,MONTH(d) 返回日期 d 中的月份值,范围是 1~12 第二 ...
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)
第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的 DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...
- Java Concurrency in Practice 读书笔记 第十章
粗略看完<Java Concurrency in Practice>这部书,确实是多线程/并发编程的一本好书.里面对各种并发的技术解释得比较透彻,虽然是面向Java的,但很多概念在其他语言 ...
- 第十章 系统级I/O
第十章 系统级I/O 一.Unix I/O 1.一个unix文件就是一个m个字节的序列 2.unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(0) .标准输出(1)和标准错误(-1). 二 ...
- 第十章实践——系统级I/O代码运行
第十章实践——系统级I/O代码运行 实验代码清单如下: 1. cp1——复制一个文件到另一个文件中(两个已经存在的文件) 复制前: 执行后结果 2. setecho.echostate——改变.显示输 ...
- 20135306黄韧 附录A及第十章学习总结
附录A 错误处理 A.1 Unix系统中的错误处理 1.Unix风格的错误处理 if ((pid = wait(NULL)) < 0) { fprintf(stderr,”wait error ...
- 第十章:鸟哥的Linux私房菜
第十章.vim程式编辑器 1. vi与vim 1.1 为何要学vim2. vi的使用 2.1 简易执行范例 2.2 按键说明 2.3 一个案例的练习 2.4 vim的暂存档.救援回复与开启时的警告讯息 ...
随机推荐
- Angular动态表单生成(八)
动态表单生成之拖拽生成表单(下) 我们的动态表单,最终要实现的效果与Form.io的在线生成表单的效果类似,可以参考它的demo地址:https://codepen.io/travist/full/x ...
- css权威指南学习笔记--列表与生成内容
列表属性 1.list-style-type:css2多于css2.1 2.list-style-image:有继承,子级列表会继承该图像 3.list-style-position:inside|o ...
- css学习之LInk & import
一.用link加载外部样式表 1.放置位置:放在head元素中 2.样式表中只能包含样式规则,不能包含其他标记语言.如出现了标记,会导致其中一部分或全部被忽略. 3.type = 'text/css' ...
- chrome浏览器使用jqprint插件打印时偶尔空白页问题
最近测试老是提bug说是有50%的概率打印出空白页,之前我也一直发现偶尔会出现这个问题,只是一直没有发现原因. 今天终于下定决心找到问题所在.开始吧! 查看源码一行行debug,发现问题只可能出现在这 ...
- Linux中kafka部署和集群
1.下载kafka安装包kafka_2.12-1.1.0. tar -xzvf kafka_2.11-0.8.2.1.tgz #解压 mv kafka_2.11-0.8.2.1 /usr/local/ ...
- html5的文档申明为什么是<!DOCTYPE html>?
首先我们来了解一下什么是文档声明: 文档声明就是文档告诉游览器该以什么样的标准去解析它.游览器可以解析的文档可不止html,还有xhtml,xml...当然在这里我们并不需要知道xhtml.xml是什 ...
- localStorage 和 sessionStorage
1.概述 以前本地存储使用 cookie.但是 Web 存储需要更加安全和快速.所以就出现了localStorage 和 sessionStorage. 2.sessionStorage,localS ...
- FPGA中ROM与RAM相关知识总结(五)
把看到的关于存储的一些东西整理一下,有些话来自于网友,所以还是那句话,看到的人要带着自己的思考去看,记住尽信书不如无书,fighting!!! 一.基本概念 最熟悉的两个词语应该是RAM与ROM,RA ...
- STM8S——Clock control(CLK)
1.主时钟源 有四种时钟源可以用做主时钟: (1)1-24MHz高速外部晶体振荡器(HSE) (2)最大24MHz高速外部时钟信号(HSE user-ext) (3)16MHz高速内部RC振荡器(HS ...
- 【原创】MVC项目中使用JQuery的upladify图片上传插件相关问题的解决方案
一. 关于Uploadify Uploadify是一个jQuery插件,你可以很容易的为你的网站添加多个文件上传功能.有两个不同的版本(HTML5和Flash)允许你灵活选择为您的网站和回退方法正确实 ...