标准库IO接口

fopen

函数原型:FILE *fopen(char *filename, char *mode)参数内容(文件名称,打开方式)
功能:打开一个文件
打开方式常用的有7种
r 以只读的方式打开文件
r+ 以读写的方式打开文件,若文件不存在则会报错
w 以只写的方式打开文件
w+ 以读写的方式打开文件,若文件不存在则创建,文件存在就清空原有内容
a 以追加写的方式打开文件,文件不存在会创建新的文件
a+ 以追加读写的方式打开,文件不存在会创建新的文件
b 以二进制操作方式打开文件;默认情况下不指定b,则认为文件是文本操作,加上b就认为是以二进制操作文件;区别在于有时候一个特殊的字符会占用两个字节的内存,如果以文本操作方式读取文件,不一定能将所有数据正确读出。所以我们平时最好是加上b
该函数的返回值:返回一个FILE*文件流指针为文件的操作句柄;失败返回NULL

fread 和 fwrite

fread函数原型:size_t fread(char *buf, size_t block_size, size_t block_count, FILE* fp) 参数内容(缓冲区,块大小,块个数,文件流指针)
功能:读取一个文件内容

fwrite函数原型:size_t fwrite(char *data, size_t block_size, size_t block_count, FILE* fp) 参数内容(数据首地址,块大小,块个数,文件流指针)
功能:将数据写到文件中

这两个函数的返回值:都是返回实际操作的块个数,例如要读取一个文件块大小size=10,块个数count=,1;但是文件大小只有8个字节,则会返回0,因为第二个块没读完。如果fread读到了文件末尾也会返回0。所以这两个函数推荐块大小为1,块个数为想要操作的数据长度。这样子就不会出现读到数据依然返回0的情况

对文件数据进行字符串操作时要注意文件数据的\0

fseek

函数原型:int fseek(FILE *fp, long offset, int whence) 参数内容(文件流指针,偏移大小,偏移起始位置)
偏移大小实参:负数-向前偏移;正数-向后偏移;0-不偏移
偏移起始位置:SEEK_SET从文件起始位置偏移;SEEK_CUR从当前读写位置开始偏移;SEEK_END从文件末尾偏移
功能:将文件流指针从whence位置偏移offset个字节,跳转文件读写的位置,文件没有数据也可以跳转,前面置空

fclose

函数原型:int fclose(FILE *FP) 参数内容(文件流指针)
功能:关闭文件流指针,释放资源

以上函数用法代码示例:

 int main(){FILE *fp = NULL;//以读写的方式打开当前路径下的test.txt文件fp = fopen("./test.txt", "r+");if (fp == NULL){perror("fopen error");return -1;}//将fp文件流指针偏移置文件末尾fseek(fp, 0, SEEK_END);char *ptr = "WhiteShirtI very cool\n";//将ptr的内容写到fp文件流指针所指位置int ret = fwrite(ptr, strlen(ptr), 1, fp);if (ret == 0){perror("fwite error");return -1;}printf("write ret:%d\n", ret);//将fp文件流指针偏移置文件的起始位置fseek(fp, 0, SEEK_SET);char tmp[1024] = { 0 };//将读取到的数据写到tmp中ret = fread(tmp, 1, 1023, fp);if (ret == 0){printf("have no data or error\n");}printf("ret:%d-[%s]\n", ret, tmp);//关闭文件并释放资源fclose(fp);return 0;}

系统调用IO接口

open

函数原型:int open(char *filename, int flag, mode_t mode) 参数内容(文件名, 选项参数-文件打开方式, 权限)
flag参数有必选项和可选项
必选项:O_RDONLY-只读; O_WRONLY-只写; O_RDWR-读写
可选项:O_CREAT-文件存在则打开,不存在则创建;O_EXCL-与O_CREAT同时使用,文件存在则报错,不存在创建; O_TRUNC-打开文件的同时清空原有内容; O_APPEND-追加写,总是将文件写到末尾
两个选项之间用|隔开

mode:如果使用了O_CREAT有可能创建新文件,就一定要指定文件权限,最终文件的权限为(mode & ~默认权限)例如mode=777,默认权限002,则文件权限为777 & ~002=775
返回值:一个非负整数–文件描述符–文件的操作句柄;失败返回-1

write

函数原型:ssize_t write(int fd, const char *buf, size_t count);参数内容(open返回的文件描述符,要写入文件的数据空间首地址,数据大小)
返回值:返回实际写入文件的数据字节长度;失败返回-1

read

ssize_t read(int fd, void *buf, size_t count); 参数内容(文件描述符,将读取的数据读到buf中, 读取的字节数)
返回值:返回实际读入的字节数,如果读取失败返回-1


lseek

off_t lseek(int fd, off_t offset, int whence) 参数内容(open返回的文件描述符,偏移量,偏移起始位置)
whence:SEEK_SET-文件起始位置;SEEK_CUR-文件当前读写位置;SEEK_END-文件末尾
返回值:成功返回当前位置相对于起始位置的偏移量;失败返回-1
与库函数的fseek唯一区别就是第一个参数不同
注意:使用偏移后尽量再偏移回到起始位置,否则下次忘记了,用的时候会发生一些低级错误

close

int close(int fd) 参数(文件描述符)
功能:通过文件描述符关闭文件,释放资源

Linux 常用的IO接口相关推荐

  1. Linux下多路复用IO接口epoll/select/poll的区别

    select比epoll效率差的原因:select是轮询,epoll是触发式的,所以效率高. Select: 1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认 ...

  2. Linux常用C函数-接口处理篇(网络通信函数)

    接口处理篇 accept, bind, connect, endprotoent, endservent, getsockopt, htonl, htons, inet_addr, inet_aton ...

  3. Linux什么是文件IO,linux中文件IO

    一. linux常用文件IO接口 1.1. 文件描述符 1.1.1. 文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指 ...

  4. minishell的实现及IO接口的调用

    Minishell编写: 问题:二维数组使用上还是和指针数组有很大差别. 运行结果如下: 基础IO:文件的输入输出操作-标准库IO接口/linux下系统调用IO接口/文件描述符的理解/重定向的理解/文 ...

  5. linux使用模板函数,Linux常用C函数

    Linux常用C函数Tag内容描述: 1.Linux常用C函数 接口处理篇 accept(接受socket连线) 相关函数 socket,bind,listen,connect 表头文件 #inclu ...

  6. linux嵌入式 控制io口,基于ARM9嵌入式的RS485总线接口设计,自动控制IO口实现通信方向控制...

    描述 随着ARM处理器应用的范围的不断深入,根据需求的不同ARM提供的外设也越来越丰富,常用的通信接口有RS232.RS485.CAN.以太网等.RS485总线凭其传输距离远.抗干扰能力强.价格低廉等 ...

  7. 【linux开发】IO端口和IO内存的区别及分别使用的函数接口

    IO端口和IO内存的区别及分别使用的函数接口 每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把 ...

  8. Linux优化之IO子系统监控与调优

    Linux优化之IO子系统 作为服务器主机来讲,最大的两个IO类型 : 1.磁盘IO 2.网络IO 这是我们调整最多的两个部分所在 磁盘IO是如何实现的 在内存调优中,一直在讲到为了加速性能,linu ...

  9. linux常用命令 打开文件,【Linux】常用命令 lsof查看打开的文件

    Linux系统把软硬件都抽象成文件,所以通过文件可以追踪到很多重要信息,如读取的配置文件.打开的端口等. 下面是常见的用法: 默认测试文件名为text.txt 1,显示打开text.txt的进程: l ...

最新文章

  1. coreData使用
  2. 简单的社交网络分析(基于R)
  3. C++98C++11的区别
  4. SLAM: 单目视觉SLAM的方案分类《机器人手册》
  5. SQL SERVER学习笔记(二)数据库管理
  6. 决策树之 GBDT 算法 - 回归部分
  7. 程序员专属段子集锦 3/10
  8. 速读-高级技能二:并行输入训练
  9. eclipse android 服务端,Eclipse搭建服务器,实现与Android的简单通信
  10. css中鼠标悬停背景色从左到右
  11. Go避免使用大堆造成的高GC开销
  12. Vins-Mono 论文 Coding 一 7(3). pose_graph: 4DOF pose_graph
  13. 渗透测试 - KALI Linux 学习 - kali linux如何启动METASPLOIT服务
  14. 新浪邮箱服务器设置,免费的新浪邮箱设置outlook怎么设置?
  15. Dm8+jpa整合liquibase框架
  16. 武汉计算机学校分数线,武汉交通学校2021年招生录取分数线
  17. 代码创建完整数据库系统,创建数据库、创建模式、输入数据、注释全面,易懂
  18. win7开启共享(热点)设置
  19. 《浏览器工作原理与实践》学习笔记
  20. 解决Win10安装DirectX报错:不能信任一个安装所需的压缩文件,请检查加密服务是否启用并且Cabinet文件证书是否有效

热门文章

  1. 查看vnc端口_如何在 Centos 8 / RHEL 8 上安装和配置 VNC 服务器
  2. sql2008 服务器未响应,sql配置管理器,SQL server (MSSQLSERVER)开启不了,请求失败或服务器未响应....
  3. matlab误比特率,[转载]使用Matlab进行误比特率仿真
  4. php 调用cron jobs,在CentOS 6.4中使用CronJobs执行PHP不起作用?
  5. ndarray python 映射_191123 使用 Pybind11 和 OpenCV 创建 Python 库
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的服装商城
  7. 利用Sigar获取系统信息
  8. ArcSDE的版本管理机制
  9. 循序渐进之Maven(4) - 第一个SpringMVC项目
  10. Cognos开发自定义排序规则的报表和自定义排名报表