【Linux库函数编程】文件编程
2016-10-21 21:51
197 查看
库函数:所谓库函数,就是独立于操作系统的,为提高程序的可移植性而生的一种方式。
无论在什么操作系统上都可以使用这些函数。
流: 上节课的 【Linux系统调用】文件编程 的操作方式为I/O文件操作,这是C提供的一种文件操作,它是通过直接存取文件来完成对文件的处理。
而今天的这课是流式文件操作,流是标准的c函数库里的一个抽象概念。当我们读写数据时,就会开启一个流,这个流可以通向文件、内存、
网络连接等,数据可以‘流’向目的地。
文件指针:在系统调用中使用文件描述符来指向一个文件,这是I/O操作的实现方式。同理,在流式文件操作中,使用
文件指针来指向一个打开的文件,类型为FILE*.
一、函数学习:fopen,fclose,fread,fwrite,fseek。
二、最佳实践:编写copy程序
一、函数学习
1、fopen: 打开流
1)函数原型
FILE *fopen(const char *path, const char *mode);
2)所属头文件
#include <stdio.h>
3)返回值
成功: 返回文件指针
失败: NULL
4)参数说明
path: 包含路径的文件名(可以是相对路径或绝对路径)
mode: 打开模式
*r: 只读
*r+: 可读可写
*w: 若文件存在,
清空文件内容; 若文件不存在,新建文件,只写
*w+: 若文件存在,清空文件内容;若文件不存在,新建文件,可读可写
*a: 以追加方式打开文件(追加内容写在文件尾),若文件不存在,新建一
个文件
*a+: 以可读、追加方式打开文件. 读文件的初始位置为文件头, 追加到的位置为文件尾.
2、fread: 读数据
1)函数原型
size_t fread(void *ptr, size_t size, size_t nmenb, FILE *stream);
2)所属头文件
#include <stdio.h>
3)返回值
成功: 成功读取的元素个数
失败: 0
4)参数说明
ptr: 存储读取数据的指针
size: 每个元素的字节数
nmenb: 读取的元素个数
stream: 待读取的文件指针
3、fclose: 关闭流
1)函数原型
int fclose(FILE *fp);
2)所属头文件
#include <stdio.h>
3)返回值
成功: 0
失败: EOF (End Of File, 文件尾)
4)参数说明
fd: 待关闭的文件指针
4、fwrite: 写数据
1)函数原型
size_t fwrite(const void *ptr, size_t size, size_t nmenb, FILE *stream);
2)所属头文件
#include <stdio.h>
3)返回值
成功: 成功写入的元素个数
失败: 0
4)参数说明
ptr: 存储待写入数据的指针
size: 每个元素的字节数
nmenb: 待写入的元素个数
stream: 待写入的文件指针
5、fseek: 定位文件流的偏移量
1)函数原型
int fseek(FILE *stream, long offset, int whence);
2)所属头文件
#include <stdio.h>
3)返回值
成功: 0
失败: -1
4)参数说明
stream: 文件指针
offset: 偏移量
whence: 偏移位置(SEEK_SET, SEEK_CUR, SEEK_END, 详细可看上一篇文章)
二、最佳实践:copy程序
无论在什么操作系统上都可以使用这些函数。
流: 上节课的 【Linux系统调用】文件编程 的操作方式为I/O文件操作,这是C提供的一种文件操作,它是通过直接存取文件来完成对文件的处理。
而今天的这课是流式文件操作,流是标准的c函数库里的一个抽象概念。当我们读写数据时,就会开启一个流,这个流可以通向文件、内存、
网络连接等,数据可以‘流’向目的地。
文件指针:在系统调用中使用文件描述符来指向一个文件,这是I/O操作的实现方式。同理,在流式文件操作中,使用
文件指针来指向一个打开的文件,类型为FILE*.
一、函数学习:fopen,fclose,fread,fwrite,fseek。
二、最佳实践:编写copy程序
一、函数学习
1、fopen: 打开流
1)函数原型
FILE *fopen(const char *path, const char *mode);
2)所属头文件
#include <stdio.h>
3)返回值
成功: 返回文件指针
失败: NULL
4)参数说明
path: 包含路径的文件名(可以是相对路径或绝对路径)
mode: 打开模式
*r: 只读
*r+: 可读可写
*w: 若文件存在,
清空文件内容; 若文件不存在,新建文件,只写
*w+: 若文件存在,清空文件内容;若文件不存在,新建文件,可读可写
*a: 以追加方式打开文件(追加内容写在文件尾),若文件不存在,新建一
个文件
*a+: 以可读、追加方式打开文件. 读文件的初始位置为文件头, 追加到的位置为文件尾.
#include <stdio.h> void main() { FILE *fptr = NULL; if ( NULL == (fptr = fopen("./fopen-file", "r")) ) { printf("Can not open the file !\n"); return; } fclose(fptr); }
2、fread: 读数据
1)函数原型
size_t fread(void *ptr, size_t size, size_t nmenb, FILE *stream);
2)所属头文件
#include <stdio.h>
3)返回值
成功: 成功读取的元素个数
失败: 0
4)参数说明
ptr: 存储读取数据的指针
size: 每个元素的字节数
nmenb: 读取的元素个数
stream: 待读取的文件指针
#include <stdio.h> void main() { FILE *fp = NULL; char buf[100]; int num_items = 0; fp = fopen("./fread-file", "r"); num_items = fread(buf, 1, 100, fp); buf[num_items] = '\0'; printf("# %d is read: %s\n", num_items, buf); close(fp); }
3、fclose: 关闭流
1)函数原型
int fclose(FILE *fp);
2)所属头文件
#include <stdio.h>
3)返回值
成功: 0
失败: EOF (End Of File, 文件尾)
4)参数说明
fd: 待关闭的文件指针
4、fwrite: 写数据
1)函数原型
size_t fwrite(const void *ptr, size_t size, size_t nmenb, FILE *stream);
2)所属头文件
#include <stdio.h>
3)返回值
成功: 成功写入的元素个数
失败: 0
4)参数说明
ptr: 存储待写入数据的指针
size: 每个元素的字节数
nmenb: 待写入的元素个数
stream: 待写入的文件指针
#include <stdio.h> void main() { char *str = "I love linux"; FILE *fp; fp = fopen("./fwrite-file", "w+"); fwrite(str, 2, 5, fp); close(fp); }
5、fseek: 定位文件流的偏移量
1)函数原型
int fseek(FILE *stream, long offset, int whence);
2)所属头文件
#include <stdio.h>
3)返回值
成功: 0
失败: -1
4)参数说明
stream: 文件指针
offset: 偏移量
whence: 偏移位置(SEEK_SET, SEEK_CUR, SEEK_END, 详细可看上一篇文章)
二、最佳实践:copy程序
#include <stdio.h> void main(int argc, char* argv[]) { FILE *fp_src = NULL; FILE *fp_dest = NULL; int count = 0; char buf[65]; /* 1. Open source and destination files. */ if ( NULL == (fp_src = fopen(argv[1], "r")) ) { puts("ERROR: File is not exist or can not open."); return; } if (NULL == (fp_dest = fopen(argv[2], "w")) ) { puts("ERROR: Can not creat dest-file."); return; } /* 2. Copy data. */ while ( (count = fread(buf, 1, 64, fp_src)) > 0) { fwrite(buf, 1, count, fp_dest); } /* 3. Close source and destinatin files. */ fclose(fp_dest); fclose(fp_src); }
相关文章推荐
- 针对Excel表格文件操作的编程实现
- 文件下载统计php编程
- 一边播放RM文件 一边播放相应的PPT文件 编程实现
- [原]编程中灵活使用批处理文件
- Java 编程技术中汉字问题的分析及解决,文件操作
- 编程建立IIS站点和虚拟目录(1)(头文件)
- ASP编程入门进阶(十):Global.asa文件
- .net编程创建 Access 文件和 Excel 文件
- 不编程,如何在ie中下载word文件
- 在WIN95中实现文件拷贝的编程方法
- Visual C#资源文件编程--创建资源文件
- 多文件编程include规则
- Visual C++编程中的文件操作
- Visual C#资源文件编程--创建资源文件
- VB程序员的FTP编程指南1.4-下载或上传文件
- 谈Delphi编程中“流”的应用--可读写信息在文件中
- 把m文件编程dll文件的问题---from mathworks
- ASP编程入门进阶(十八):FSO组件之文件操作(上)
- Linux下C语言编程--文件的操作
- Visual C#资源文件编程--创建资源文件