9.3 Linux_文件I/O_相关函数

server/2024/11/15 5:47:41/

打开与关闭

1、打开文件

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

返回值:成功返回文件描述符,失败返回EOF

pathname:文件路径

flags:标志,其中O_RDONLY、O_WRONLY、O_RDWR三个互斥,其余可用 ' | ' 链接

标志名含义
O_RDONLY只读方式打开
O_WRONLY只写方式打开
O_RDWR可读可写方式打开
O_CREAT文件不存在则创建,此时mode参数有效
O_EXCL与O_CREAT搭配使用,测试文件是否存在,存在返回错误
O_TRUNC若文件存在,则清除文件原有的内容
O_APPEND以尾部插入的方式进行写入

mode:表示文件的权限,是可读可写可执行,以八进制表示。实际权限 = mode & (~umask) 

具体权限参考博文"4.Linux_Shell命令"中的"3、修改文件权限“章节,博文链接如下:

4.Linux_Shell命令-CSDN博客

注意:open函数只能打开设备文件,不能创建设备文件

2、关闭文件

int close(int fd);

返回值:成功返回0,失败返回EOF

fd:要关闭的文件描述符

注意:文件关闭后,fd不再能代表文件

读写与光标

读写文件的使用方式与标准I/O中的fread、fwrite非常相似。

1、读取文件

ssize_t read(int fd, void *buf, size_t count);

返回值:成功返回实际读取的大小,失败返回EOF,读取到末尾返回0

fd:要进行操作的文件的文件描述符

buf:读取数据缓冲区,用于存放读取的数据

count:想要读取数据的个数,单位:字节

注意:返回值不一定等于count,假如文件只有3个字节,count传入5,那么返回值是3

注意:count值不能超过buf的大小

注意:read不会因为遇到回车就停止读取,只有读完count个字节后才会停止

2、写入文件

ssize_t write(int fd, const void *buf, size_t count);

返回值:成功返回实际写入的大小,失败返回EOF

fd:要进行操作的文件的文件描述符

buf:写入数据缓冲区,用于存放要写入的数据

count:想要写入的数据个数,单位:字节

3、定位文件

off_t lseek(int fd, off_t offset, int whence);

返回值:成功返回当前文件读写位置,失败返回EOF

offset、whence含义与fseek完全一致,参考博文"9.2 Linux_标准I/O_相关函数"的"2、流定位"章节,博文链接为:9.2 Linux_标准I/O_相关函数-CSDN博客

整体实验

具体代码实现如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main(){int fd;char read_buf[100] = {0};//1.打开文件if((fd = open("./file",O_RDWR|O_CREAT|O_TRUNC,0777)) == -1){perror("open");return -1;}//2.写入数据if(write(fd,"write\n",strlen("write\n")) == -1){perror("write");return -1;}//3.重置光标lseek(fd,0,SEEK_SET);//4.读取数据read(fd,read_buf,sizeof(read_buf));printf("read:%s",read_buf);//5.关闭文件close(fd);return 0;
}

代码运行结果如下:


http://www.ppmy.cn/server/121759.html

相关文章

影响爬虫动态IP质量的因素有哪些?

最近经常刷到关于影响爬虫动态IP质量的因素的话题&#xff0c;许多朋友对此充满了好奇。那么&#xff0c;今天我们一起来深入解析这个问题。 动态IP在爬虫中的重要性 在网络爬虫的世界中&#xff0c;动态IP是一个重要的工具。它允许爬虫程序在采集数据时频繁更换IP地址&#…

手写js中call、apply、bind函数

手写call 原理 将需要改变this指向的函数暂时性的设置为需要设置this指向的对象的函数。 代码 // 定义mycall方法&#xff0c;所有函数对象都是Function对象 Function.prototype.mycall function (thisArg, ...args) {// 设置this&#xff0c;此时this指向原函数&#xff…

C++三大特性之多态

前言 关于多态&#xff0c;是c中最重要的东西&#xff0c;通过虚函数来实现多态这种特性 一、多态的概念 多态是面向对象编程&#xff08;OOP&#xff09;中的一个重要概念&#xff0c;它允许对象在不同的上下文中以不同的方式表现。这意味着相同的接口&#xff08;函数、方法&…

[大语言模型-工程实践] 手把手教你-基于Ollama搭建本地个人智能AI助理

[大语言模型-工程实践] 手把手教你-基于Ollama搭建本地个人智能AI助理 Note: 草稿优化中&#xff0c;持续更新&#xff0c;相关代码将统一提供出来~ 1. Ollama简介 Ollama 是一个用于在本地环境中运行和定制大型语言模型的工具。它提供了一个简单而高效的接口&#xff0c;用于…

SpringMVC详细使用总结教程

一、SpringMVC 1.1 介绍 Spring MVC 是 Spring 框架中的一个模块&#xff0c;用于构建基于 Java 的 Web 应用程序。它基于 MVC&#xff08;Model-View-Controller&#xff09;架构模式&#xff0c;提供了一种灵活而强大的方式来开发 Web 应用程序。Spring MVC 框架充分利用了…

loadrunner个人笔记

创建场景配置&#xff1a; 两个同时 去四&#xff1a;日志、时间、模拟、其他自动事务 加一&#xff1a;首选项 1、写脚本&#xff0c;沟通官方、文件打印扫描 MFI-sw.support.gsd.imsc.sda.globalopentext.com support.casemicrofocus.com 支持资源 | Micro Focus | OpenT…

MyBatis-config.xml核心配置

MyBatis-config.xml 包含了会深深影响MyBatis行为的设置和属性信息&#xff0c;配置文档的顶层结构如下 environments&#xff08;环境配置&#xff09; environments用于配置数据库的URL信息&#xff0c;MyBatis-config可以动态配置多个数据源&#xff0c;用于连生产、预发、…

Linux学习 重定向 管道 流

重定向 管道 流 在 Linux 中一个命令的去向可以有 3 个地方&#xff1a;终端、文件、作为另外一个命令的入参。 而命令一般都是通过键盘输入&#xff0c;然后输出到终端、文件等地方&#xff0c;它的标准用语是 stdin 、 stdout 以及 stderr 。 标准输入stdin&#xff0c;终端接…