底层I/O的操作过程
来源:互联网 发布:淘宝订单自检通知 编辑:程序博客网 时间:2024/05/21 23:00
打开文件→改变文件位置→读写文件→关闭文件
文件的操作主要用到5个函数:open,read, write, lseek,close
0 文件描述符
文件操作符是一个非负整数,是一个用于描述被打开文件的索引值
一个进程从运行开始一般都会打开3个文件,标准输入,标准输出和标准出错函数。三个对应的描述符分别是0,1,2。一般第一个打开的文件是从3开始的。
1 文件的创建、打开与关闭
open函数用于打开或创建文件,在打开或创建文件时可指定文件的属性及用户的权限等各种参数
#include<sys/types.h>#include<sys/stat.h>#include<fcantl.h>int open(const char *pathname,int flags)int open(const char *pathname,int flags,mode_t mode)
…..所要用到的头文件
open函数返回,若成功返回文件描述符,若出错返回-1
pathname使用绝对路径或相对路径
flags是打开文件方式的参数,定义在fcntl.h文件中,O_RDONLY 只读,O_WRONLY只写,O_RDWR读写三个参数只能指定其中一个
mode是用于指定所创建文件的权限,使用|来组合 具体用法 S_I(R/W/X)(USR/GEP/OTH) 也可以用数字来代替 例如0777
umask 用户权限的掩码 默认为 0022 1 可以由命令更改 2可以在代码中更改 umask(0000);
creat函数
open(pathname,O_RDWR|O_CREAT|O_TRUNC,0666)
O_RDWR 可读可写 O-CREAT 建立 0_TRUNC 覆盖 0666是存储权限
推荐使用2,调用open函数
create函数返回,成功返回只写方式打开的文件描述符,出错为-1
pathname、mode含义与open相同
close函数
#include <unistd.h> int close(int fd)
close函数返回,成功返回0,出错-1
fd表示已打开文件的描述符
2、文件的定位
当前文件位移量,非负整数,度量一个文件开始处计算的字节数,读写操作从当前文件位移量处开始
调用lseek函数显示的定位一个打开文件
#include <sys/types.h> #include <unistd.h> off_t lseek(int fd,off_t offset,int whence)
fd表示已打开文件的描述符
offset表示位移量的大小,单位字节,可正负
whence,解释参数offset大小,下面是取值和含义
whence取值含义
SEEK_SET 将该文件的位移量设置为距文件开始处offset个字节
SEEK_CUR 将该文件的位移置量设置为其当前增加offset个字节,offset可为正或负
SEEK_END 将该文件的位移量设置为文件长度加offset个字节,offset可为正或负
小技巧
如果要得到文件的长度 lseek(fd ,0,SEEK_END);
文件的读写
read函数
打开文件读取数据
#include <unistd.h> ssize_t read(int fd,void *buf,size_t count)
返回,读到的字节数,若已到文件尾端返回0,出错返回-1
fd表示进行操作的文件描述符
buf是一个指向缓冲区的指针
count表示本次操作将要读取的数据字节数
write函数
用write函数向打开文件写数据
#include <unistd.h> ssize_t write (int fd,void *buf,size_t count)
返回,成功为已写的字节数,出错为-1
fd操作的文件描述符
buf指向缓冲区的指针,放入要写入文件的数据
count表示本次操作写入文件的数据字节数
参考http://blog.csdn.net/del1214/article/details/7202372#
- 底层I/O的操作过程
- 底层操作的几个I/O函数
- java I/O底层
- Java I/O底层是如何工作的?
- Java I/O底层是如何工作的
- java I/O底层是如何工作的?
- Java I/O底层是如何工作的?
- Java I/O底层是如何工作的?
- Java I/O底层是如何工作的?
- Java I/O底层是如何工作的?
- C语言底层的I/O输入输出总结
- 底层文件I/O和ANSI标准I/O的区别
- i/o——Java I/O底层
- 底层文件I/O操作---open()函数
- [Linux]--底层文件 I/O 操作
- 5.Tornado HTTP服务器的基本流程---Tornado底层I/O的内部实现
- TinyOS之Blink(一) - 底层I/O指定分析
- 小何讲Linux: 底层文件I/O操作
- (51nod)1003
- Android中的Handler
- bootcamp 没有创建 win7 win8 安装盘
- ZOJ1140&&POJ1469&&HDU1083-Courses
- Python安装第三方模块
- 底层I/O的操作过程
- JDBC 2017-03-12 FIRST
- CGI接口原理及实现(转载)
- diff 命令和patch文件的使用
- 数组的4个方法
- Linux初学者必知的学习网站
- 我的软件工程课目标
- 头文件中无法进行#define宏定义常量
- Java简介