文件编程(2)底层文件IO操作
来源:互联网 发布:淘宝店铺头像在哪里换 编辑:程序博客网 时间:2024/05/01 08:46
这些函数的特点是不带缓存,直接对文件进行读写操作。不是ANSI C的组成部分,但是posix标准的组成部分。
一.核心理论:文件描述符
(1)成年公民有身份证编号
(2)打开的文件对应文件描述符。
(3)实质就是一串数字。
(4)作用就是能够区分所有打开的文件。
二.函数学习
man命令默认是按照Linux系统内置手册顺序查找你要搜索的关键词,一旦找到就不继续查找了。相应的顺序是1命令,2系统调用,3库函数。
2.1 打开文件
2.1.1 函数名
Open
2.1.2 函数原形
(1)int open(const char* pathname,int flags);
(2)int open(const char* pathname,int flags.mode_t mode);
2.1.3 函数功能
打开或者创建一个文件
2.1.4 所属头文件
<sys/types.h>
<sys/stat.h>
<fcntl.h>
2.1.5 返回值
成功 返回文件描述符
失败 返回-1
2.1.6 参数说明
Pathname:要打开的文件名(含路径)
Flags:文件打开以后的权限
(1)必须包含以下三者之一
O_RDONLY,O_WRONLY,O_RDWR
(2)可以外加包含以下选项
O_APPEND,O_CREAT
如果使用O_CREAT选项,则必须使用第三个参数mode。默认是不创建不存在的文件的。默认是覆盖之前存在的文件内容的,所以要指明是否以追加方式打开。
Mode:文件待创建文件的访问权限,前提是要在flags参数里面包含了o_creat标志。格式是:文件所有者 + 文件同组用户 + 其他用户。前面多一个0表示粘连位。
2.2 创建文件
2.2.1 函数名
Creat
2.2.2 函数原形
int creat(const char *pathname, mode_t mode);
2.2.3 函数功能
创建一个文件并且以只写的方式打开它。
如果已经存在则不创建。
2.2.4 所属头文件
<sys/types.h>
<sys/stat.h>
<fcntl.h>
2.2.5 返回值
成功 返回文件描述符
失败 返回-1
2.2.6 参数说明
Pathname:创建的文件名(含路径)
Mode:创建的文件爱你的读写权限
2.3 关闭文件
2.3.1 函数名
Close
2.3.2 函数原形
Int close(int fd);
2.3.3 函数功能
关闭一个打开的文件
2.3.4 所属头文件
<unistd.h>
2.3.5 返回值
成功:0
失败:-1
2.3.6 参数说明
Fd:要关闭的文件的文件描述符。
2.4 读文件
2.4.1 函数名
read
2.4.2 函数原形
ssize_t read(int fd, void *buf, size_t count);
2.4.3 函数功能
从打开的文件中读取指定大小的数据到指定的内存位置。
2.4.4 所属头文件
<unistd.h
2.4.5 返回值
成功:返回读取的字节数
失败:返回-1
2.4.6 参数说明
Fd:已经打开且要从该文件读取数据的文件描述符
Buf:存放读取到的数据的起始位置
Count:想要读取的字节数
2.5 写文件
2.5.1 函数名
Write
2.5.2 函数原形
ssize_t write(int fd, const void *buf, size_t count);
2.5.3 函数功能
向已经打开的文件写入预先指定的数据
2.5.4 所属头文件
<unistd.h>
2.5.5 返回值
成功:返回成功写入的字节数
失败:-1
2.5.6 参数说明
Fd:已经打开且要向该文件写入数据的文件描述符
Buf:要写入的数据存放的起始位置
Count:想要写入的字节数
文件操作中有隐形的文件读写指针,打开文件的时候,默认是指向文件头,在写入数据到该打开的文件后,文件读写指针指向了文件尾,当文件还未关闭,就继续读取数据的话,只能读到空数据,因为读和写都是按照文件指针的位置进行的。
2.6 定位文件
2.6.1 函数名
Lseek
2.6.2 函数原形
off_t lseek(int fd, off_t offset, int whence);
2.6.3 函数功能
将文件读写指针移动到指定位置
2.6.4 所属头文件
<sys/types.h>
<unistd.h>
2.6.5 返回值
成功:返回文件读写指针距离文件头的位置(字节数)
失败:-1
2.6.6 参数说明
fd:要移动指针的文件
Offset:移动的距离(字节数)
Whence:决定指针以什么位置为基准开始移动
SEEK_SET:以文件头为基准,此时的offset只能是整数
SEEK_CUR: 以当前位置为基准,此时的offset可正可负,正数往后移动,负数往前移动。
SEEK_END:以文件尾为基准移动,此时的offset之能是负数。
2.7 复制文件描述符
2.7.1 函数名
Dup
2.7.2 函数原形
int dup(int oldfd);
2.7.3 函数功能
复制一个已存在的文件描述符,但是和老描述符指向同一文件。
2.7.4 所属头文件
<unistd.h>
2.7.5 返回值
成功:返回新的文件描述符
失败:-1
2.7.6 参数说明
Oldfd:要复制的老的文件描述符。
三.复制文件实例
#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#define BUF_SIZE 1024#define SRC_FILE_NAME "src_file"#define DST_FILE_NAME "dst_file"#define OFFSET 10240int main(void){ int src_file,dst_file; unsigned char buff[BUF_SIZE]; int real_read_len; src_file = open(SRC_FILE_NAME,O_RDONLY); dst_file = open(DST_FILE_NAME,O_WRONLY|O_CREAT,0644); if(src_file < 0 | dst_file < 0) { printf("open error!\n"); exit(1); } lseek(src_file,-OFFSET,SEEK_END); while((real_read_len = read(src_file,buff,sizeof(buff))) > 0) { write(dst_file,buff,real_read_len); } close(dst_file); close(src_file); return 0;}
0 0
- 文件编程(2)底层文件IO操作
- 文件IO操作编程
- Linux系统编程(2)——文件与IO之系统调用与文件IO操作
- 文件的IO操作与GUI编程
- IO编程——文件复制操作
- IO编程——文件复制操作
- Linux编程——文件 IO操作
- 【Linux系统编程】文件IO操作
- linux系统编程-文件IO操作
- File IO(NIO.2):文件操作
- Java IO编程-文件(2)
- IO操作(文件操作)
- Linux程序设计——文件操作(底层文件访问)
- C#文件IO操作
- 标准IO文件操作
- IO文件操作
- 文件IO操作笔记
- java IO 文件操作
- 怎么处理java.net.BindException: Address already in use: JVM_Bind
- iOS页面之间传值的方式(NSUserDefault/Delegate/NSNotification/Block)
- 对io流学习的简单总结
- 007、第七讲 资源管理:声音文件 总结【unity3d如何添加播放音乐】
- 算法笔记之 全排列算法 一 递归求解
- 文件编程(2)底层文件IO操作
- 使用MFC的CFile文件类和CArchive串行化类进行二进制文件读写操作
- ios tableview cell 侧滑删除
- 每天一个linux命令(36):diff 命令
- 开启博客之旅
- 浅谈我对IO流的了解 - 字符流缓冲区
- 解决easyui 中显示Date类型数据为[object Object],json中格式化日期
- easyUI 动态添加窗体
- linux apt-get