day26-IO(2)
三、IO
4.文件的打开
1.函数接口
9.fwrite
①原型: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
②功能:向流中写入ptr指向的nmemb个对象,每个对象size个字节
③参数:
ptr:指向数据空间的首地址size:写入的每个对象的大小nmemb:写入对象的个数stream:文件流指针
④返回值:
成功返回实际写入对象的个数失败返回0
10.fread
①原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
②功能:从流中读取nmemb个对象到ptr指向的空间中,每个对象size个字节
③参数:
ptr:存放数据空间的首地址size:读取对象的字节大小memb:读取对象的个数stream:文件流指针
④返回值:
成功返回读到对象的个数失败或者读到文件末尾返回0
6.流的定位
1.概念
设置流的偏移量
2.偏移量的设置
1.fseek
①原型:int fseek(FILE *stream, long offset, int whence);
②功能:设置流的偏移量的标识
③参数:
stream:文件流指针offset:偏移量> 0 向后偏移< 0 向前偏移whence:标识SEEK_SET 文件开头SEEK_CUR 当前位置SEEK_END 文件末尾
④返回值:
成功返回0 失败返回-1
2.ftell
①原型:long ftell(FILE *stream);
②功能:获得流的偏移量
③参数:
stream:文件流指针
④返回值:
成功返回流的偏移量
3.rewind
①原型:void rewind(FILE *stream);
②功能:将流重新定位到开头
7.文件IO
1.概念
1.标准IO是有缓存的IO,文件IO没有缓存,适合于通信、硬件设备操作
2.标准IO是库函数,文件IO是系统调用
2.系统调用与库函数
1.系统调用:是Linux内核中的代码,只能在Linux系统中使用
2.库函数是对系统调用的封装,可以在不同的操作系统中安装并使用,库函数最终还是要调用系统调用完成对应功能
3.文件IO函数接口
1.函数接口
标准IO 文件IOfopen openfclose closefgetc/fputc read/writefgets/fputsfscanf/fprintffread/fwritefseek/ftell/rewind lseek
2.文件打开
①原型:
②功能:打开文件获得操作文件的文件描述符
③参数:
pathname:要打开的文件路径flags:打开文件的标志,必须包含三者之一O_RDONLYO_WRONLYO_RDWRO_CREAT 文件不存在创建(注意要给定创建文件的权限)O_TRUNC 文件存在截断为0(清0)O_APPEND 追加O_EXCL 文件存在报错
④返回值:
成功返回新文件描述符失败返回-1
注:
①有三个特殊的文件描述符:标准输入(0)、标准输出(1)、标准错误(2)
②文件描述符特点:
●非负整数
●取尚未被占用的最小的非负整数
●文件描述符是有上限的,到达上限后再打开会报错误
3.关闭文件描述符
①原型:int close(int fd);
②功能:关闭文件描述符
4.标准IO对应的文件IO的打开方式
标准IO | 文件IO |
r | O_RDONLY |
r+ | O_RDWR |
w | O_WRONLY | O_CREAT | O_TRUNC, 0664 |
w+ | O_RDWR | O_CREAT | O_TRUNC, 0664 |
a | O_WRONLY | O_APPEND | O_CREAT, 0664 |
a+ | O_RDWR | O_APPEND | O_CREAT, 0664 |