系统级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的更多相关文章

  1. 读《编写可维护的JavaScript》第九、十章总结

    第九章 将配置数据从代码中分离出来 9.2 抽离配置数据 这章比较好理解,也非常常见,作者给的俩个例子就能说明一切: // 将配置数据藏在代码中 function validate(value) { ...

  2. 0526 Sprint1个人总结 & 《构建之法》第八、九、十章

    Sprint1的个人总结: 我是老人组的成员,我们是做一款四则运算训练的软件.然后我是接了界面设计的任务,所以我任务将会是sprint1中相对重一点的一方.我的感觉是,界面要做得充满童趣,毕竟我们的软 ...

  3. Getting Started With Hazelcast 读书笔记(第八章-第十章)

    第八章到第十章就是一些介绍性的描述,吹的就是Hazelcast能使用在各种地方..   第八章 -从外面看 1.Hazelcast做了一个memcache的java实现,方便py和php使用. 2.可 ...

  4. 第十章 MySQL 常用函数

    第十章 MySQL 常用函数 第一节:日期和时间函数 1,CURDATE() 返回当前日期:2,CURTIME() 返回当前时间:3,MONTH(d) 返回日期 d 中的月份值,范围是 1~12 第二 ...

  5. sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)

    第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的  DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...

  6. Java Concurrency in Practice 读书笔记 第十章

    粗略看完<Java Concurrency in Practice>这部书,确实是多线程/并发编程的一本好书.里面对各种并发的技术解释得比较透彻,虽然是面向Java的,但很多概念在其他语言 ...

  7. 第十章 系统级I/O

    第十章 系统级I/O 一.Unix I/O 1.一个unix文件就是一个m个字节的序列 2.unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(0) .标准输出(1)和标准错误(-1). 二 ...

  8. 第十章实践——系统级I/O代码运行

    第十章实践——系统级I/O代码运行 实验代码清单如下: 1. cp1——复制一个文件到另一个文件中(两个已经存在的文件) 复制前: 执行后结果 2. setecho.echostate——改变.显示输 ...

  9. 20135306黄韧 附录A及第十章学习总结

    附录A  错误处理 A.1 Unix系统中的错误处理 1.Unix风格的错误处理 if ((pid = wait(NULL)) < 0) { fprintf(stderr,”wait error ...

  10. 第十章:鸟哥的Linux私房菜

    第十章.vim程式编辑器 1. vi与vim 1.1 为何要学vim2. vi的使用 2.1 简易执行范例 2.2 按键说明 2.3 一个案例的练习 2.4 vim的暂存档.救援回复与开启时的警告讯息 ...

随机推荐

  1. 联想拯救者s15k重装w10系统教程

    目的:1.自己平常健忘,且总是要重装系统,2.给看到此篇文章的人一点参考 ps:联想拯救者s15k系列,带有两个硬盘,一个是装系统的硬盘,大小约120G,一个是资料盘,大小约900G,系统重装在小硬盘 ...

  2. 通过ReentrantLock简单了解下并发包中的锁

    ReentrantLock在进行实例化时,可以通过构造函数的参数选择是否使用公平锁FairSync或者非公平锁NonfairSync,两者的区别比较简单,如果是公平锁则新来的线程会先检测同步队列中是否 ...

  3. RadioButtonFor值为false.默认选中的问题

    (自己看了下.图片有点宽.显示的不全.可以右键新标签查看) 作为一个新手.今天又开始了mvc的学习之旅.然而学习过程中又遇到了一个奇妙的问题.... 一切按部就班到了这里.注册界面. 一眼看上去就不对 ...

  4. 图片在线处理 webp!

    之前处理图片的方式是,小图标通过gulp配置的spritesmith雪碧图方式,.png会先用ps工具转成.jpg,然后jpg太大则用在线压缩工具来进行压缩(另外gulp系列的gulp-imagemi ...

  5. 用NI的数据采集卡实现简单电子测试之5——压控振荡器的测试

    本文从本人的163博客搬迁至此. 为了展示连续信号采集的方法,以其外部触发采集功能.我用运算放大器实现了一个最简单的低频压控振荡器(VCO),作为USB-6009采集的信号源.在LabVIEW下编写的 ...

  6. 重学Verilog(3)——参数化模块

    1.parameter方法 首先有这样一个模块 module half_adder(co,sum,a,b); output co,sum; input a,b; ; ; and #and_delay ...

  7. nodejs addon/module

    https://github.com/nodejs/node-addon-examples https://github.com/nodejs/node-gyp http://skitr.com/20 ...

  8. Android内核编译

    说明: 我这里用的是Android 4.2.2自带的交叉编译工具.如果是使用host系统安装的,我觉得应该也是可以的.但是没有测试过.因为Android源代码已经自带了,所以大多数情况下,不需要再安装 ...

  9. [Deep-Learning-with-Python]神经网络入手学习[上]

    神经网络入手[上] [x] 神经网络的核心部分 [x] Keras介绍 [ ] 使用Keras解决简单问题:分类和回归 神经网络剖析 神经网络的训练与下列对象相关: 网络层Layers,网络层结合形成 ...

  10. 2991:2011 求2011^n的后四位。

    2991:2011 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 已知长度最大为200位的正整数n,请求出2011^n的后四位. 输入 第一行为一个正整数k ...