linux I/O操作

1、C标准I/O库函数与Unbuffered I/O函数

fopen、fgets、fputs、fclose、fread、fwrite、perror、stderror等函数成为C标准I/O库函数

open、read、write、close等系统函数称为无缓冲I/O(Unbuffered I/O)函数



Q:用户程序在读写文件时既可以调用C标准I/O库函数,也可以
直接调用底层的Unbuffered I/O函数,那么用哪一组函数好呢?

A:(1)用Unbuffered I/O函数每次读写都要进内核,调一个系统调用比调一个用户空间的函数要
慢很多,所以在用户空间开辟I/O缓冲区还是必要的,用C标准I/O库函数就比较方便,省
去了自己管理I/O缓冲区的麻烦。

(2)用C标准I/O库函数要时刻注意I/O缓冲区和实际文件有可能不一致,在必要时需调
用fflush(3)。

(3)我们知道UNIX的传统是Everything is a file,I/O函数不仅用于读写常规文件,也用于读写
设备,比如终端或网络设备。在读写设备时通常是不希望有缓冲的,例如向代表网络设备
的文件写数据就是希望数据通过网络设备发送出去,而不希望只写到缓冲区里就算完事儿
了,当网络设备接收到数据时应用程序也希望第一时间被通知到,所以网络编程通常直接
调用Unbuffered I/O函数。

2、用户程序不能直接访问内核中的文件描述符表,而只能使用文件描述符表的索
引(即0、1、2、3这些数字),这些索引就称为文件描述符(File Descriptor),用int型变量
保存

每个进程在Linux内核中都有一个task_struct结构体来维护进程相关
的信息,称为进程描述符(Process Descriptor),而在操作系统理论中称为进程控制块
(PCB,Process Control Block)。task_struct中有一个指针指向files_struct结构体,称为
文件描述符表,其中每个表项包含一个指向已打开的文件的指针

练习题目:

1. 使用open和close完成以下操作。
2. 只读打开、只写打开、读写打开、只写加创建、读写加创建。
3. 每个打开要用关闭操作来关闭所打开的文件。
4. 把所有打开的文件描述符的值打印输出。
5. 总结规律。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值