Linux学习-软件编程(标准IO)
fwrite
原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream); 功能:向流中写入ptr指向的nmemb个对象,每个对象size个字节 参数:ptr:指向数据空间的首地址size:写入的每个对象的大小nmemb:写入对象的个数stream:文件流指针 返回值:成功返回实际写入对象的个数失败返回0
fread
原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 功能:从流中读取nmemb个对象到ptr指向的空间中,每个对象size个字节 参数:ptr:指向数据空间的首地址size:读取的每个对象的大小nmemb:读取对象的个数stream:文件流指针 返回值:成功返回读到对象的个数失败或者读到文件末尾返回0
1.流的定位
1.1 概念
设置流的偏移量
1.2 偏移量的设置
1.fseek
原型:int fseek(FILE *stream, long offset, int whence); 功能:设置流的偏移量的标识 参数:stream:文件流指针offse:偏移量> 0 向后偏移< 0 向前偏移whence:标识SEEK_SET 文件开头SEEK_CUR 当前位置SEEK_END 文件末尾 返回值:成功返回0,失败返回-1
2.ftell
原型:long ftell(FILE *stream); 功能:获得流的偏移量 参数:stream:文件流指针 返回值:成功返回流的偏移量
3.rewind
原型:void rewind(FILE *stream); 功能:将流重新定位到开头 参数:stream:文件流指针 返回值:成功返回流的偏移量
2.文件IO
2.1 概念
- 标准IO有缓存,文件IO没有缓存,适合于通信、硬件设备操作
- 标准IO是库函数,文件IO是系统调用
2.2 系统调用与库函数
- 系统调用:是Linux内核中的代码,只能在Linux系统中使用
- 库函数:是对系统调用的封装,可以在不同的操作系统中安装并使用,库函数最终还是要调用系统调用完成对应功能
2.3 文件IO函数接口
1. 函数接口
标准IO 文件IO fopen open fclose close fgetc/fputc read/write fgets/fputs fscanf/fprintf fread/fwrite fseek/stell/rewind lseek
2.文件打开
原型:int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode); 功能:打开文件获得操作文件的文件描述符 参数:pathname:要打开的文件路径flags:打开的文件的标志,必须包含以下三个之一O_RDONLY、O_WRONLY、O_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
5.文件IO读写
write
原型:ssize_t write(int fd, const void *buf, size_t count); 功能:向文件描述符中写入buf指向的count个字节的数据 参数:fd:文件描述符buf:要写入的数据空间首地址count:字节数 返回值:成功返回实际写入的字节数失败返回-1