当前位置: 首页 > news >正文

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
fopenopen
fcloseclose
fgetc/fputcread/write
fgets/fputs
fscanf/fprintf
fread/fwrite
fseek/stell/rewindlseek

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
rO_RDONLY
r+O_RDWR
wO_WRONLY | O_CREAT | O_TRUNC, 0664
w+O_RDWR | O_CREAT | O_TRUNC, 0664
aO_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
http://www.dtcms.com/a/327883.html

相关文章:

  • 【ROS2】ROS2 基础学习教程 以lerobot-so100为例
  • specCPU2017在麒麟系统的简单测试
  • VisionPro——1.VP与C#联合
  • 前端/在vscode中创建Vue3项目
  • 【实时Linux实战系列】实时环境监测系统架构设计
  • 多奥电梯智能化解决方案的深度解读与结构化总结,内容涵盖系统架构、功能模块、应用场景与社会价值四大维度,力求全面展示该方案的技术先进性与应用前景。
  • HTTPS服务
  • 重构与性能的平衡术:先优化结构,再优化速度
  • 机器学习—— TF-IDF文本特征提取评估权重 + Jieba 库进行分词(以《红楼梦》为例)
  • A1-MPLS-LDP配置
  • 【MongoDB】简单理解聚合操作,案例解析
  • MongoDB分析insert源代码
  • Android init.rc详解
  • 【Linux】init和bash的区别
  • CentOS 7.9 升级 GLibc 2.34
  • secureCRT ymodem协议连续传输文件速率下降
  • C++Linux八股
  • 机器学习 [白板推导](十)[马尔可夫链蒙特卡洛法]
  • 机试备考笔记11/31
  • Elasticsearch JS 自定义 ConnectionPool / Connection / Serializer、敏感信息脱敏与 v8 平滑迁移
  • 数据结构——栈和队列2
  • JAiRouter 0.2.1 更新啦:内存优化 + 配置合并 + IP 限流增强,运维体验再升级
  • TCP/IP、socket、http
  • 5分钟精通 useMemo
  • Ubuntu-初始化环境
  • Kafka的一条消息的写入和读取过程原理介绍
  • SQL脚本--捞json数据
  • 【SpringBoot】08 容器功能 - SpringBoot底层注解汇总大全
  • CPPIO流
  • 熟悉并使用Spring框架 - XML篇