Linux文件操作编程_第1页
Linux文件操作编程_第2页
Linux文件操作编程_第3页
Linux文件操作编程_第4页
Linux文件操作编程_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内容内容不带缓存的不带缓存的I/O操作操作带缓存的带缓存的I/O操作操作实训实训1:文件内容拷贝:文件内容拷贝实训实训2:字符串文件内容解析:字符串文件内容解析Linux文件结构文件结构带缓存的带缓存的I/O操作操作实训实训1:文件内容拷贝:文件内容拷贝不带缓存的不带缓存的I/O操作操作带缓存的带缓存的I/O操作操作实训实训1:文件内容拷贝:文件内容拷贝带缓存的带缓存的I/O操作操作不带缓存的不带缓存的I/O操作操作带缓存的带缓存的I/O操作操作(1) Linux文件结构(2) 不带缓存的I/O操作 即底层操作。文件底层即底层操作。文件底层I/O操作的系统调用主要有操作的系统调用主要有open

2、、close、read、write、lseek函数来直接操作文件。函数来直接操作文件。函数作用open打开或创建文件close关闭文件read从指定的文件描述符中读出的数据放到缓冲区中,并返回实际读出的字节数。write把指定缓冲区的数据写入指定的文件描述符中,并返回实际写入的字节数。lseek在指定的文件描述符中将文件指针定位到相应的位置。open函数语法函数语法需要的头文件:需要的头文件:#include #include #include 函数原型:函数原型:int open(const char* pathname, int flags);int open(const char* pa

3、thname, int flags, int perms);参数说明:参数说明:pathname:被打开的文件名(包括路径名);flags:文件打开方式:只读O_RDONLY、可写O_WRONLY、读写O_RDWR、O_CREAT若文件不存在则新建、O_TRUNC若文件存在且只读或只写成果打开,则先删除全部原有数据、O_APPEND打开文件后文件指针指向末尾、O_EXCL和O_CREAT一起判断是否存在。返回值:成功返回文件描述符;失败返回返回值:成功返回文件描述符;失败返回-1close函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:int close(in

4、t fd);函数参数:函数参数:fd 文件描述符函数返回值函数返回值 0 成功-1 出错使用使用open、close函数示例函数示例例例1:设计一个程序以只读方式打开系统配:设计一个程序以只读方式打开系统配置文件置文件“/etc/inittab”read函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:ssize_t read(int fd, void *buf, size_t count);函数参数:函数参数:fd 文件描述符buf 存储内容的内存空间(指定存储读出数据的缓冲区)count 读取的字节数函数返回值函数返回值0 成功读取的字节数0 出错 0 表示

5、遇到文件末尾EOF使用使用read函数示例函数示例例例1改进:设计一个程序以只读方式打开系改进:设计一个程序以只读方式打开系统配置文件统配置文件“/etc/inittab”,从中读取,从中读取100个字符并打印。个字符并打印。write函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:ssize_t write(int fd, void *buf, size_t count);函数参数:函数参数:fd 文件描述符buf 需要写入内容的内存空间(缓冲区的指针)count 写入的字节数函数返回值函数返回值0 成功写入的字节数0 出错 0 表示遇到文件末尾EOF使用使

6、用write函数示例函数示例例例2:设计一个程序,打开当前目录下文件:设计一个程序,打开当前目录下文件“./test”写入字符串写入字符串“Hello,welcome to hustwenhua!” 。lseek函数语法函数语法需要的头文件:需要的头文件:#include #include 函数原型:函数原型:ssize_t lseek(int fd, off_t offset, int whence);函数说明:函数说明:每一个已打开的文件都有一个读写位置,当打开文件时通常其读写位置是指向文件开头,若是以附加的方式打开文件(如O_APPEND),则读写位置会指向文件尾。当read()或wri

7、te()时,读写位置会随之增加,lseek()便是用来控制该文件的读写位置。 lseek函数语法函数语法函数参数:函数参数:fd 文件描述符文件描述符offset 偏移量(可正可负)偏移量(可正可负)whence:SEEK_SET 文件开头文件开头+offset为新读写位置为新读写位置 SEEK_CUR 目前读写位置目前读写位置+offset为新位置为新位置 SEEK_END 文件结尾文件结尾+offset为新位置为新位置函数返回值函数返回值0 定位后文件操作位置相对于文件头的偏移量定位后文件操作位置相对于文件头的偏移量0 出错,返回出错,返回-1较特别的使用方式:较特别的使用方式:1) 将读

8、写位置移到文件开头:将读写位置移到文件开头: 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操作是基于流缓冲的,是符合操作是基于流缓冲的,是符合ANSI C的标的标准准I/O处理。比如:处理。比如:printf()、scanf()函数

9、等。函数等。 带缓冲的带缓冲的I/O操作是在内存中开辟一个操作是在内存中开辟一个“缓冲区缓冲区”,为,为程序中的每一个文件使用。当执行读文件的操作时,从程序中的每一个文件使用。当执行读文件的操作时,从磁盘文件中将数据先读入内存磁盘文件中将数据先读入内存“缓冲区缓冲区”,装满后再从,装满后再从内存内存“缓冲区缓冲区”依次读入接收的数据。依次读入接收的数据。函数作用fopen打开或创建文件fclose关闭文件fread从文件中读取一个字节。fwrite将数据成块写入文件流。带缓存的I/O操作函数作用fseek移动文件流的读写位置。ftell查询文件流当前的读写位置。rewind把文件的读写位置设置

10、在文件头。fgetc从文本文件中读取一个字符。fputc向文本文件中写入一个字符。fgets从文本文件中读取一个字符串(一行数据,以n结尾)fputs向文本文件中写入一个字符串。fopen函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:FILE * fopen(const char* path, const char * mode);参数说明:参数说明:path:带文件路径的文件名mode:文件打开状态。返回值:返回值:成功返回指向FILE的文件指针(文件句柄);失败返回NULLfopen函数的参数mode取值参数作用r打开只读文件,文件必须存在。r+打开可读

11、写文件,文件必须存在。w打开只写文件,若文件存在则清除内容,不存在则新建该文件。w+打开可读写文件,若文件存在则清除内容,不存在则新建该文件。a以附加方式打开只写文件,若文件不存在则建立该文件;若存在则写入的数据被加到文件尾。a+以附加方式打开可读写文件,若文件不存在则建立该文件;若存在则写入的数据被加到文件尾。上面的可以加上一个b,如rb、w+b、ab+等,b表示打开的二进制文件,而不是纯文本文件。fclose函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:int fclose(FILE * stream);参数说明:参数说明:stream:文件句柄。返回值

12、:返回值:成功返回0;出错返回EOFfread函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);参数说明:参数说明:ptr: 指向一块存储空间,用来存放本次读取到的数据size: 读取文件一条记录的字节数大小nmemb: 本次读取文件记录的数目stream: 将要读取的文件流句柄返回值:返回值:成功返回实际读取到的nmemb数目出错返回EOF使用使用fopen、fread函数示例函数示例例例4:以只读方式打开系统配置文件:以只读方式打

13、开系统配置文件“/etc/passwd”,并读取打印出前,并读取打印出前100个字个字符。符。fwrite函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);参数说明:参数说明:ptr: 需写入的数据地址size: 写入文件一条记录的字节数大小nmemb: 写入文件记录的数目stream: 将要写入数据的文件流句柄返回值:返回值:成功返回实际写入到的nmemb数目出错返回EOF使用使用fwrite函数示例函数示例例例5:设

14、计一个程序打开当前目录下文件:设计一个程序打开当前目录下文件“./test2”并写入并写入 “Hello,welcome to hustwenhua!”字符串。字符串。fseek函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:int fseek(FILE *stream, long offset, int whence);参数说明:参数说明:stream:文件句柄offset:偏移量(可正可负)whence:SEEK_SET 文件开头+offset为新读写位置 SEEK_CUR 目前读写位置+offset为新位置 SEEK_END 文件结尾+offset为新位

15、置返回值:返回值:成功返回0出错返回-1ftell函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:int ftell(FILE *stream);参数说明:参数说明:stream:文件句柄返回值:返回值:0:文件流当前操作位置相对于文件头的偏移量0:出错函数说明:函数说明:简单地返回当前位置。rewind函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:void rewind(FILE *stream);参数说明:参数说明:stream:文件句柄返回值:返回值:无函数说明:函数说明:把文件指针位置设置为0,即把文件指针设置到文件

16、的起始位置。使用使用ftell、rewind函数示例函数示例例例6:设计一个程序打开:设计一个程序打开“/etc/passwd”文件,计算文件长度,并一次性读取文件文件,计算文件长度,并一次性读取文件所有内容后打印该内容。所有内容后打印该内容。fgetc函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:int fgetc(FILE *stream);参数说明:参数说明:stream:文件句柄返回值:返回值:0:成功读取字符内容EOF:出错函数说明:函数说明:从文件中读取一个字符。fputc函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函

17、数原型:int fputc(int ch, FILE *stream);参数说明:参数说明:ch:需要写入文件的字符内容stream:文件句柄返回值:返回值:0:成功写入的字符值EOF:出错函数说明:函数说明:向文件中写入一个字符。fgets函数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:char * fgets(char *s, int n, FILE *stream);参数说明:参数说明:s:读取字符串的存储内存指针n:读取字符串内存的大小stream:文件句柄返回值:返回值:非空:成功NULL:出错函数说明:函数说明:从文件中读取一行字符串。fputs函

18、数语法函数语法需要的头文件:需要的头文件:#include 函数原型:函数原型:int fputs(char *string, FILE *stream);参数说明:参数说明:string:需要写入文件的字符串内容stream:文件句柄返回值:返回值:0:成功0:出错函数说明:函数说明:向文件中写入一个字符串。使用使用fgetc、fputc、fgets、fputs函数示例函数示例例例7:设计一个程序打开:设计一个程序打开“/etc/passwd”文件,依次读取每行内容并打印该内容。文件,依次读取每行内容并打印该内容。(4) 实训实训1:文件内容拷贝:文件内容拷贝程序功能:程序功能:设计程序,要求从一源文件设计程序,要求从一源文件src_file(若不存在(若不存在则创建)中读取倒数第二个则创建)中读取倒数第二个10KB数据复制到目数据复制到目标文件标文件dest_file。演示:不带缓存的文件内容拷贝演示:不带缓存的文件内容拷贝程序设计思路:程序设计思路:程序要求从源文件读取倒数第二个程序要求从源文件读取倒数第二个10KB数据,数据,首先需要以只读方式打开源文件,并把读取位首先需要以只读方式打

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论