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

linux--关于linux文件IO(2) open、read、lseek、stat

open

在linux中的读写文件有对应的命令。在终端中输入man 2 open可以打开open的手册页,注意man 2是linux自己的函数的一些手册,man 3是C库的手册
打开手册页之后找到open函数的用法如下:

#以下是需要的库文件,man 2 open打开直接复制
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>#这个是打开文件的用法,返回文件描述符,所以是int类型
int open(const char *pathname, int flags);参数:- pathname : 要打开的文件路径- flags : 对文件的操作权限和其他的设置-必选项:O_RDONLY,  O_WRONLY,  or  O_RDWR-可选项:O_CREAT 文件不存在创建新文件 等等等...很多,去man 2 open里看。int open(const char *pathname, int flags, mode_t mode);参数:- pathname : 要打开的文件路径- flags : 对文件的操作权限和其他的设置-必选项:O_RDONLY,  O_WRONLY,  or  O_RDWR-可选项:O_CREAT 文件不存在创建新文件 等等等...很多,去man 2 open里看。-mode : 八进制的数,表示创建出的新的文件的操作权限最终的权限是:mode & ~umask (这里是掩码取反, 然后和设置的mode按位与)0777 -> 111111111&	0775 -> 111111101-----------------------111111101会少一些权限,umask的作用就是抹去某些权限,普通用户coder是(0)022

mode这里为什么是8进制数?
因为在linux中权限要么就是rwx,就是读写可执行的权限,那么这三个权限如果都有就是111,二进制来说就是7。那么一个文件不仅只在一个地方有权限,还有用户对他的权限、其他文件对他的权限等这样的权限使用的地方,有三个这样的地方,那么如果三个地方全都有权限就是0777,0代表八进制数,777代表都有权限,

在这里插入图片描述
可以看到gcc编译之后,得到的txt文件权限是0775(5是因为最后是r-x)
在这里插入图片描述

read和write

同样man 2 read打开得到read函数的手册,

#需要的头文件
#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);参数:- fd:文件描述符,open得到的,通过这个文件描述符操作某个文件- buf:需要读取数据存放的地方,数组的地址(传出参数)- count:指定de数组的大小,读多少返回值:-成功:>0:返回实际已经读取的字节数=0:文件已经读取完了-失败:-1,并且设置errno	ssize_t write(int fd, const void *buf, size_t count);参数:-fd:文件描述符,open得到的,通过这个文件描述符操作某个文件-buf:要往磁盘写入的数据,数组-count:要写的数据的实际大小,写多少返回值:成功:实际写入的字节数失败:-1,并设置erro

在这里插入图片描述

lseek

与C库的fseek是一样的用法。man 2 lseek看命令手册

#include <sys/types.h>
#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);参数:-fd:文件描述符-offset: 偏移量 off_t就类似于long型-whence:SEEK_SET:直接指定文件指针到当前设置的offset位置处SEEK_CUR:设置偏移量,从当前文件指针加上设置的offsetSEEK_END:设置偏移量,从当前文件末尾的指针加上设置的offset返回:当前指针所在位置,也就是当前所在的字节数作用:1.移动文件指针到文件头lseek(fd,0,SEEK_SET);2.获取当前文件的指针位置lseek(fd,0,SEEK_CUR); 3.获取文件长度lseek(fd,0,SEEK_END);4.拓展文件长度,当前文件10b,拓展到110b   这个功能就是先提前占用磁盘大小,例如下载一个软件lseek(fd,100,SEEK_END);   //需要写一次数据才管用write(fd, " ", 1);

stat

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);作用:获取一个文件相关的一些信息,直接文件的信息参数:-pathname:操作文件的路径-statbuf:一个结构体变量,传出参数,用于保存获取到的文件的信息,返回值:成功:返回0失败:返回-1,设置errno
int lstat(const char *pathname, struct stat *statbuf);作用:获取软链接文件的信息参数:-pathname:操作文件的路径-statbuf:一个结构体变量,传出参数,用于保存获取到的文件的信息,返回值:成功:返回0失败:返回-1,设置errno

stat和lstat的区别就是,当有软链接时,stat会返回链接的那个的文件的信息,而lstat会返回软的那个问价你的信息。
一个文件包含着这么一些信息:
在这里插入图片描述
那么statbuf这个结构体是这样的变量:就是去获取他们的,创建的时候就struct stat statbuf
在这里插入图片描述
stat的获取信息的方式
在这里插入图片描述

http://www.lryc.cn/news/538099.html

相关文章:

  • 利用xtquant高效获取财务数据:量化分析的重要补充
  • Unity UI个人总结
  • Javascript的数据类型
  • Day3 25/2/16 SUN
  • 欧洲分组加密算法之Kasumi
  • vue使用v-chart的实践心得
  • Endnote使用笔记——持续更新
  • Tetragon:一款基于eBPF的运行时环境安全监控工具
  • CAS单点登录(第7版)23.Webflow 管理
  • word文档中标题的自动编号问题
  • kkFileView二开之pdf转图片接口
  • 利用亚马逊云科技RDS for SQL Server配置向量数据存储
  • vLLM 部署 DeepSeek 大模型避坑指南
  • 本地部署MindSearch(开源 AI 搜索引擎框架),然后上传到 hugging face的Spaces——L2G6
  • 【大模型系列】Windows系统上运行大语言模型方式
  • Linux Mem -- Where the mte store and check in the real hardware platform
  • 连锁企业管理系统的五大核心功能
  • Docker配置镜像加速-解决黑马商城部署Mysql失败问题
  • Cherno C++ P54 内存:栈与堆
  • 对项目交接的一些思考
  • 【PYTORCH】官方的turoria实现中英文翻译
  • 【算法与数据结构】并查集详解+题目
  • 【动态路由】系统web url整合系列【springcloud-gateway实现】【不改hosts文件版】组件一:多个Eureka路由过滤器
  • Mybatis-扩展功能
  • 基于SpringBoot实现的大学社团平台系统实现功能六
  • 电子电气架构 --- 机器学习推动车载雷达的发展
  • python从入门到进去
  • 智能化客户画像构建管理:AI视频监控在大型商场的技术
  • php 拼接字符串
  • Deepseek实用万能提问模板