版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux文件I/O操作编程内容不带缓存的I/O操作带缓存的I/O操作实训1:文件内容拷贝实训2:字符串文件内容解析Linux文件结构带缓存的I/O操作实训1:文件内容拷贝不带缓存的I/O操作带缓存的I/O操作实训1:文件内容拷贝带缓存的I/O操作不带缓存的I/O操作带缓存的I/O操作(1)Linux文件结构1、Linux文件类型:普通文件目录文件设备文件链接文件管道文件2、文件描述符一个非负整数,索引值,通常使用宏来表示。代表指向内核中每个进程打开文件的记录表。(2)不带缓存的I/O操作即底层操作。文件底层I/O操作的系统调用主要有open、close、read、write、lseek函数来直接操作文件。函数作用open打开或创建文件close关闭文件read从指定的文件描述符中读出的数据放到缓冲区中,并返回实际读出的字节数。write把指定缓冲区的数据写入指定的文件描述符中,并返回实际写入的字节数。lseek在指定的文件描述符中将文件指针定位到相应的位置。open函数语法需要的头文件:#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>函数原型:int
open(constchar*pathname,intflags);int
open(constchar*pathname,intflags,intperms);参数说明:pathname:被打开的文件名(包括路径名);flags:文件打开方式:只读O_RDONLY、可写O_WRONLY、读写O_RDWR、O_CREAT若文件不存在则新建、O_TRUNC若文件存在且只读或只写成果打开,则先删除全部原有数据、O_APPEND打开文件后文件指针指向末尾、O_EXCL和O_CREAT一起判断是否存在。返回值:成功返回文件描述符;失败返回-1close函数语法需要的头文件:#include<unistd.h>函数原型:int
close(int
fd);函数参数:fd——文件描述符函数返回值0——成功-1——出错使用open、close函数示例例1:设计一个程序以只读方式打开系统配置文件“/etc/inittab”read函数语法需要的头文件:#include<unistd.h>函数原型:ssize_t
read(int
fd,void*buf,size_tcount);函数参数:fd——文件描述符buf——存储内容的内存空间(指定存储读出数据的缓冲区)count——读取的字节数函数返回值>0——成功读取的字节数<0——出错
0——表示遇到文件末尾EOF使用read函数示例例1改进:设计一个程序以只读方式打开系统配置文件“/etc/inittab”,从中读取100个字符并打印。write函数语法需要的头文件:#include<unistd.h>函数原型:ssize_t
write(int
fd,void*buf,size_tcount);函数参数:fd——文件描述符buf——需要写入内容的内存空间(缓冲区的指针)count——写入的字节数函数返回值>0——成功写入的字节数<0——出错
0——表示遇到文件末尾EOF使用write函数示例例2:设计一个程序,打开当前目录下文件“./test”写入字符串“Hello,welcometohustwenhua!”。lseek函数语法需要的头文件:#include<unistd.h>#include<sys/types.h>函数原型:ssize_t
lseek(int
fd,off_toffset,intwhence);函数说明:每一个已打开的文件都有一个读写位置,当打开文件时通常其读写位置是指向文件开头,若是以附加的方式打开文件(如O_APPEND),则读写位置会指向文件尾。当read()或write()时,读写位置会随之增加,lseek()便是用来控制该文件的读写位置。lseek函数语法函数参数:fd——文件描述符offset——偏移量(可正可负)whence:SEEK_SET文件开头+offset为新读写位置
SEEK_CUR目前读写位置+offset为新位置
SEEK_END文件结尾+offset为新位置函数返回值>0——定位后文件操作位置相对于文件头的偏移量<0——出错,返回-1较特别的使用方式:
1)将读写位置移到文件开头:
lseek(fd,0,SEEK_SET)
2)将读写位置移到文件尾:
lseek(fd,0,SEEK_END)
3)将取得目前文件位置:
lseek(fd,0,SEEK_CUR)使用lseek函数示例例3:通过lseek函数计算/etc/inittab
文件的长度。(3)带缓存的I/O操作带缓冲的I/O操作是基于流缓冲的,是符合ANSIC的标准I/O处理。比如:printf()、scanf()函数等。带缓冲的I/O操作是在内存中开辟一个“缓冲区”,为程序中的每一个文件使用。当执行读文件的操作时,从磁盘文件中将数据先读入内存“缓冲区”,装满后再从内存“缓冲区”依次读入接收的数据。函数作用fopen打开或创建文件fclose关闭文件fread从文件中读取一个字节。fwrite将数据成块写入文件流。带缓存的I/O操作函数作用fseek移动文件流的读写位置。ftell查询文件流当前的读写位置。rewind把文件的读写位置设置在文件头。fgetc从文本文件中读取一个字符。fputc向文本文件中写入一个字符。fgets从文本文件中读取一个字符串(一行数据,以\n结尾)fputs向文本文件中写入一个字符串。fopen函数语法需要的头文件:#include<stdio.h>函数原型:FILE*fopen(constchar*path,constchar*mode);参数说明:path:带文件路径的文件名mode:文件打开状态。返回值:成功返回指向FILE的文件指针(文件句柄);失败返回NULLfopen函数的参数mode取值参数作用r打开只读文件,文件必须存在。r+打开可读写文件,文件必须存在。w打开只写文件,若文件存在则清除内容,不存在则新建该文件。w+打开可读写文件,若文件存在则清除内容,不存在则新建该文件。a以附加方式打开只写文件,若文件不存在则建立该文件;若存在则写入的数据被加到文件尾。a+以附加方式打开可读写文件,若文件不存在则建立该文件;若存在则写入的数据被加到文件尾。上面的可以加上一个b,如rb、w+b、ab+等,b表示打开的二进制文件,而不是纯文本文件。fclose函数语法需要的头文件:#include<stdio.h>函数原型:int
fclose(FILE*stream);参数说明:stream:文件句柄。返回值:成功返回0;出错返回EOFfread函数语法需要的头文件:#include<stdio.h>函数原型:size_t
fread(void*ptr,size_tsize,size_t
nmemb,FILE*stream);参数说明:ptr:指向一块存储空间,用来存放本次读取到的数据size:读取文件一条记录的字节数大小nmemb:本次读取文件记录的数目stream:将要读取的文件流句柄返回值:成功返回实际读取到的nmemb数目出错返回EOF使用fopen、fread函数示例例4:以只读方式打开系统配置文件“/etc/passwd”,并读取打印出前100个字符。fwrite函数语法需要的头文件:#include<stdio.h>函数原型:size_t
fwrite(constvoid*ptr,size_tsize,size_t
nmemb,FILE*stream);参数说明:ptr:需写入的数据地址size:写入文件一条记录的字节数大小nmemb:写入文件记录的数目stream:将要写入数据的文件流句柄返回值:成功返回实际写入到的nmemb数目出错返回EOF使用fwrite函数示例例5:设计一个程序打开当前目录下文件“./test2”并写入“Hello,welcometohustwenhua!”字符串。fseek函数语法需要的头文件:#include<stdio.h>函数原型:int
fseek(FILE*stream,longoffset,intwhence);参数说明:stream:文件句柄offset:偏移量(可正可负)whence:SEEK_SET文件开头+offset为新读写位置
SEEK_CUR目前读写位置+offset为新位置
SEEK_END文件结尾+offset为新位置返回值:成功返回0出错返回-1ftell函数语法需要的头文件:#include<stdio.h>函数原型:int
ftell(FILE*stream);参数说明:stream:文件句柄返回值:>0:文件流当前操作位置相对于文件头的偏移量<0:出错函数说明:简单地返回当前位置。rewind函数语法需要的头文件:#include<stdio.h>函数原型:voidrewind(FILE*stream);参数说明:stream:文件句柄返回值:无函数说明:把文件指针位置设置为0,即把文件指针设置到文件的起始位置。使用ftell、rewind函数示例例6:设计一个程序打开“/etc/passwd”文件,计算文件长度,并一次性读取文件所有内容后打印该内容。fgetc函数语法需要的头文件:#include<stdio.h>函数原型:int
fgetc(FILE*stream);参数说明:stream:文件句柄返回值:>0:成功读取字符内容EOF:出错函数说明:从文件中读取一个字符。fputc函数语法需要的头文件:#include<stdio.h>函数原型:int
fputc(int
ch,FILE*stream);参数说明:ch:需要写入文件的字符内容stream:文件句柄返回值:>0:成功写入的字符值EOF:出错函数说明:向文件中写入一个字符。fgets函数语法需要的头文件:#include<stdio.h>函数原型:char*
fgets(char*s,intn,FILE*stream);参数说明:s:读取字符串的存储内存指针n:读取字符串内存的大小stream:文件句柄返回值:非空:成功NULL:出错函数说明:从文件中读取一行字符串。fputs函数语法需要的头文件:#include<stdio.h>函数原型:int
fputs(char*string,FILE*stream);参数说明:string:需要写入文件的字符串内容stream:文件句柄返回值:0:成功<0:出错函数说明:向文件中写入一个字符串。使用fgetc、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一次性竹制餐具供货与可持续资源开发合同2篇
- 幼儿园教研工作制度模版(2篇)
- 人力资源助理的工作职责(2篇)
- 2025年小学班主任德育计划例文(2篇)
- 幼儿园幼儿膳食管理制度范文(2篇)
- 2025年英语教师工作计划模版(3篇)
- 夏季汛期安全工作方案(2篇)
- 教职工上下班工作制度(2篇)
- 二零二五年度快递代理权转让与业绩考核合同范本3篇
- 2025年幼儿园卫生保健工作计划例文(二篇)
- 合肥市建筑行业施工安全生产标准化示范工地评选办法
- 2025年度航空航天材料研发与应用技术服务合同2篇
- AEO贸易安全培训
- 2025年中国财产险行业市场深度分析及发展趋势预测报告
- 巨量信息流广告(初级)营销师认证考试题及答案
- 上海市12校2025届高三第一次模拟考试英语试卷含解析
- 重庆市渝中区2023-2024学年八年级上学期期末考试数学试题含答案及解析
- 0-3岁婴幼儿心理发展知到智慧树期末考试答案题库2024年秋杭州师范大学
- (正式版)QB∕T 8049-2024 家用和类似用途微压富氧舱
- 医用红外热像仪
- 有限空间作业应急预案及现场处置方案
评论
0/150
提交评论