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

桂林企业网站建设/品牌推广和品牌营销

桂林企业网站建设,品牌推广和品牌营销,武汉哪家做网站公司好,墙绘做网站哪家好文件系统小册(Fuse&Posix&K8s csi)【2 Posix】 往期文章:文件系统小册(Fuse&Posix&K8s csi)【1 Fuse】 POSIX:可移植操作系统接口(标准) 1 概念 POSIX:…

文件系统小册(Fuse&Posix&K8s csi)【2 Posix】

往期文章:文件系统小册(Fuse&Posix&K8s csi)【1 Fuse】

POSIX:可移植操作系统接口(标准)

1 概念

POSIX:Portable Operating System Interface of UNIX,POSIX标准定义了操作系统应该为应用程序提供的接口标准,是在各种UNIX操作系统上运行的软件的一系列API标准的总称。是由IEEE指定的一个标准。

  • 为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。

  • POSIX 并不局限于 UNIX。许多其它的操作系统也支持POSIX,例如Windows NT就提供了与POSIX兼容的库。

  • 应用程序通过应用编程接口(API)而不是直接通过系统调用来编程。因此程序员不关心系统调用,他们只需要使用好API,而操作系统只需要处理好系统调用。不同的操作系统内核实现同样的功能的方法不同,为了实现可移植性,不同操作系统需要遵循同一套标准。

  • POSIX 涵盖了以下内容:系统接口、命令和实用程序、网络文件访问等

  • 相关文档:https://www.gnu.org/software/libc/manual/html_node/POSIX.html

拓展:GNU、Linux、Unix关系

GNU 是一个软件运动和一系列工具,而Linux是操作系统内核,Unix 是一个商业起源的操作系统家族。(GNU+Linux内核组成了我们常说的"Linux",因此很多人认为Linux发行版应该叫做GNU/Linux

  1. GNU:
    GNU 是一个自由软件项目,始于1983年,由理查德·斯托曼(Richard Stallman)发起,目标是创建一套完全自由的类Unix操作系统。
    GNU 提供了许多Unix系统中常见的工具、库和编译器,如GCC(GNU Compiler Collection)、Glibc(GNU C Library)和GDB(GNU Debugger)等。GNU 自己并未完成操作系统内核的开发,但其软件组件被广泛用于各种操作系统中,尤其是Linux。
  2. Linux:
    Linux 是一个由林纳斯·托瓦兹(Linus Torvalds)开发的开源操作系统内核,首次发布于1991年。
    Linux 并非GNU项目的一部分,但它通常与GNU软件一起使用,形成了所谓的GNU/Linux操作系统。这种组合提供了与Unix类似的环境,但其内核是Linux,而不是GNU。
    Linux 内核是免费和开源的,可以与各种用户空间工具和库(包括许多GNU组件)结合,形成各种不同的Linux发行版,如Ubuntu、Fedora和Debian等。
  3. Unix:
    Unix 是一种最初由AT&T贝尔实验室开发的操作系统,首次发布于1969年。
    Unix 是商业产品,历史上大部分版本都是闭源的,但也有一些开源实现,如OpenBSD、FreeBSD和Solaris。
    Unix 设计理念对Linux和GNU项目有很大影响,比如它的命令行界面、文件系统结构和多任务处理机制。
    Linux 和GNU项目都遵循POSIX(可移植操作系统接口)标准,以确保与Unix兼容。

三者联系与区别:

  • 联系:
    GNU/Linux 和 Unix 都是多用户、多任务的操作系统,它们都支持网络功能和提供类似的工作环境。
    许多Unix的工具和概念在Linux和GNU项目中得到了实现和扩展,形成了强大的命令行工具链和开发环境。
    Linux 和 GNU 软件的组合使得开发者可以在不侵犯版权的情况下获得与Unix类似的功能和体验。
  • 区别:
    GNU 是一个软件运动和一系列工具,而Linux是操作系统内核。
    Unix 是一个商业起源的操作系统家族,而Linux和GNU项目是开源的。
    Linux 不是GNU项目的一部分,但GNU工具和库经常与Linux内核一起使用。
    Unix 有多个商业和开源版本,而Linux主要以开源社区驱动的发行版形式存在。

参考文章:https://www.gnu.org/gnu/linux-and-gnu.html

2 POSIX的标准文件接口(常用部分)

POSIX标准的文件接口有:close、create、open、read、sync、write、dup、dup2、flock、fcntl、fsync、lseek、mkstemp等。

open:打开文件

close:关闭文件

creat:创建文件

read:读文件内容

write:写内容到文件

lseek:改变文件指针的位置(文件定位)

fsync:将文件数据从系统缓存区写到磁盘

flock:文件锁,用于进程间同步

stat:获取文件的统计信息

truncate:截断文件

symlink:创建符号链接(如:软链,类比快捷方式)

readlink:读取符号链接的内容

opendir:打开目录

readdir:读取目录内容

mkdir:创建目录

rmdir: 删除目录

telldir:定位目录的当前位置

seekdir:定位目录

rename:重命名

chmod:动态修改文件访问权限

chown:动态修改文件所有者和组别

3 与FUSE的关系:FUSE实现了POSIX

  • FUSE设计的目标之一就是支持POSIX标准,这样基于FUSE构建的文件系统可以提供与原生内核文件系统类似的接口,使得用户能够使用标准的系统调用(如open、read、write等)来与FUSE文件系统交互。
  • 通过FUSE,我们可以实现一个符合POSIX标准的文件系统,允许应用程序(包括那些依赖于标准文件操作的程序)无缝地与FUSE文件系统一起工作。
  • FUSE(Filesystem in Userspace)并不直接实现所有的POSIX文件相关操作规范,但它提供了足够的接口来实现一个符合POSIX标准的文件系统。FUSE的核心在于它为用户空间的文件系统实现提供了一个桥梁,允许开发者通过用户空间的程序来响应内核的文件系统调用。这些调用包括了大部分POSIX标准中的文件操作,但不是所有。

fuse_operations 结构体定义了一系列的回调函数,这些函数对应于POSIX文件操作,例如:

  • getattr: 实现stat操作。
  • read: 实现read操作。
  • write: 实现write操作。
  • open: 实现open操作。
  • create: 实现creat操作。
  • unlink: 实现unlink操作。
  • rename: 实现rename操作。
  • mkdir: 实现mkdir操作。
  • symlink: 实现symlink操作。
  • readlink: 实现readlink操作。
  • chmod: 实现chmod操作。
  • chown: 实现chown操作。
  • truncate: 实现truncate操作。
    flush: 实现文件关闭前的清理操作。

源码:

  • https://github.com/libfuse/libfuse/中的fuse.h文件
/** Get file attributes.** Similar to stat().  The 'st_dev' and 'st_blksize' fields are* ignored. The 'st_ino' field is ignored except if the 'use_ino'* mount option is given. In that case it is passed to userspace,* but libfuse and the kernel will still assign a different* inode for internal use (called the "nodeid").** `fi` will always be NULL if the file is not currently open, but* may also be NULL if the file is open.*/int (*getattr) (const char *, struct stat *, struct fuse_file_info *fi);/** Read the target of a symbolic link** The buffer should be filled with a null terminated string.  The* buffer size argument includes the space for the terminating* null character.	If the linkname is too long to fit in the* buffer, it should be truncated.	The return value should be 0* for success.*/int (*readlink) (const char *, char *, size_t);/** Create a file node** This is called for creation of all non-directory, non-symlink* nodes.  If the filesystem defines a create() method, then for* regular files that will be called instead.*/int (*mknod) (const char *, mode_t, dev_t);/** Create a directory** Note that the mode argument may not have the type specification* bits set, i.e. S_ISDIR(mode) can be false.  To obtain the* correct directory type bits use  mode|S_IFDIR* */int (*mkdir) (const char *, mode_t);/** Remove a file */int (*unlink) (const char *);/** Remove a directory */int (*rmdir) (const char *);/** Create a symbolic link */int (*symlink) (const char *, const char *);/** Rename a file** *flags* may be `RENAME_EXCHANGE` or `RENAME_NOREPLACE`. If* RENAME_NOREPLACE is specified, the filesystem must not* overwrite *newname* if it exists and return an error* instead. If `RENAME_EXCHANGE` is specified, the filesystem* must atomically exchange the two files, i.e. both must* exist and neither may be deleted.*/int (*rename) (const char *, const char *, unsigned int flags);/** Create a hard link to a file */int (*link) (const char *, const char *);/** Change the permission bits of a file** `fi` will always be NULL if the file is not currently open, but* may also be NULL if the file is open.*/int (*chmod) (const char *, mode_t, struct fuse_file_info *fi);/** Change the owner and group of a file** `fi` will always be NULL if the file is not currently open, but* may also be NULL if the file is open.** Unless FUSE_CAP_HANDLE_KILLPRIV is disabled, this method is* expected to reset the setuid and setgid bits.*/int (*chown) (const char *, uid_t, gid_t, struct fuse_file_info *fi);/** Change the size of a file** `fi` will always be NULL if the file is not currently open, but* may also be NULL if the file is open.** Unless FUSE_CAP_HANDLE_KILLPRIV is disabled, this method is* expected to reset the setuid and setgid bits.*/int (*truncate) (const char *, off_t, struct fuse_file_info *fi);...

4 测试系统是否满足POSIX语义 (pjdfstest)

pjdfstest:用于测试posix语义

#git clone源码
git clone https://github.com/pjd/pjdfstest.git
cd pjdfstest# 编译源码
autoreconf -ifs   ./configure   
make pjdfstest
# 查看版本
prove --version## 进入目标目录,执行pjdfstest脚本
cd /root/test (文件系统的挂载目录)
# 测试所有用例(-v显示进度)
prove -rv /root/pjdfstest/tests(pjdfstest里的tests目录)
# 测试单个语义
prove -r /root/pjdfstest/tests/open

在这里插入图片描述

参考:https://www.gnu.org/software/libc/manual/html_node/POSIX.html

相关文章:

文件系统小册(FusePosixK8s csi)【2 Posix标准】

文件系统小册(Fuse&Posix&K8s csi)【2 Posix】 往期文章:文件系统小册(Fuse&Posix&K8s csi)【1 Fuse】 POSIX:可移植操作系统接口(标准) 1 概念 POSIX:…...

vue 弹出框组件重复打开时,资源重新加载

新增或者编辑内容使用同一个弹出框&#xff0c;如何使数据可以重新加载&#xff1f; 1、绑定时间戳&#xff0c;有副作用&#xff0c;屏幕会闪烁一下 <el-dialog :key"timer" > </el-dialog> 2、v-if和:visible.sync同时使用 <el-dialogv-if"…...

图像的IO操作

代码&#xff1a; import cv2 as cvimport matplotlib.pyplot as plt​#读取图像img cv.imread("../data/images/zidane.jpg")​#显示图像#2.1 OpenCVcv.imshow("dili",img)cv.waitKey(0)cv.destroyAllWindows()​#2.2 matplotlibplt.imshow(img[:,:,::-…...

关于 Vue.js 中`transition`组件使用:页面切换动画和标签移动动画都是要用到的

一、引言 在 Vue.js 中&#xff0c;transition组件提供了一种简单而强大的方式来实现页面过渡效果。它可以让元素在状态改变时&#xff0c;如进入或离开视图时&#xff0c;以平滑的动画方式进行过渡。通过transition&#xff0c;我们可以为应用增添更加生动和吸引人的用户体验…...

Flink Rest Basic Auth - 安全认证

背景 公司目前需要将Flink实时作业云化,构建多租户实时计算平台。目前考虑为了资源高效利用,并不打算为每个租户部署一套独立的Kubernetes集群。也就意味着多个租户的作业可能会运行在同一套kubernets集群中。此时实时作业的任务就变的很危险,因为网络可能是通的,就会存在…...

安全U盘和普通U盘有什么区别?

安全U盘&#xff08;也称为加密U盘或安全闪存驱动器&#xff09;与普通U盘肯定是有一些区别的&#xff0c;从字面意思上来看&#xff0c;就能看出&#xff0c;安全U盘是能够保护文件数据安全性的&#xff0c;普通U盘没这一些功能的&#xff0c;可随意拷贝文件&#xff0c;不防盗…...

大数据与数据科学的学科边界

大数据和数据科学是两个紧密相关但又不完全相同的学科。它们都关注数据的收集、管理、分析和解释&#xff0c;但侧重点有所不同。 大数据主要关注处理和分析大规模数据集的技术和方法。它涉及到数据存储、数据处理、数据挖掘、数据可视化和分布式计算等方面的技术。大数据的目…...

Chrome 源码阅读:跟踪一个鼠标事件的流程

我们通过在关键节点打断点的方式&#xff0c;去分析一个鼠标事件的流程。 我们知道chromium是多进程模型&#xff0c;那么&#xff0c;我们可以推测&#xff1a;一个鼠标消息先从主进程产生&#xff0c;再通过跨进程通信发送给渲染进程&#xff0c;渲染进程再发送给WebFrame&a…...

[C/C++]_[初级]_[在Windows和macOS平台上导出动态库的一些思考]

场景 最近看了《COM本质论》里关于如何设计基于抽象基类作为二进制接口,把编译器和链接器的实现隐藏在这个二进制接口中,从而使用该DLL时不需要重新编译。在编译出C接口时,发现接口名直接是函数名,比如BindNativePort,怎么不是_BindNativePort?说明 VC++导出的函数默认是使…...

MySQL排序操作

025排序操作 select .. from .. order by 字段 asc/descselect empno, ename, sal from emp order by sal asc;asc 不写的话&#xff0c;默认升序 多个字段排序 查询员工的编号、姓名、薪资&#xff0c;按照薪资升序排列&#xff0c;如果薪资相同的&#xff0c;再按照姓名升…...

问题:西周后期形成了能够传布四方、留存后世的兵书——著述年代最早的兵书——( )和( ). #媒体#知识分享

问题&#xff1a;西周后期形成了能够传布四方、留存后世的兵书——著述年代最早的兵书——( )和( ). A、《军志》 B、《军事》 C、《军政》 D、《孙子兵法》 参考答案如图所示...

kafka-消费者-指定offset消费(SpringBoot整合Kafka)

文章目录 1、指定offset消费1.1、创建消费者监听器‘1.2、application.yml配置1.3、使用 Java代码 创建 主题 my_topic1 并建立3个分区并给每个分区建立3个副本1.4、创建生产者发送消息1.4.1、分区0中的数据 1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1…...

JavaWeb2-Vue

Vue 前端框架&#xff0c;免除原生JS中的DOM操作简化书写 &#xff08;以前学过又忘了&#xff0c;现在才知道原来vue是前端的&#xff09; 基于MVVM思想&#xff08;model-view -viewModel&#xff09;实现数据双向绑定 model是数据模型 view负责数据展示 即DOM 中间这个负责…...

《广告数据定量分析》读书笔记之统计原理2

3.相关分析&#xff1a;描述的是两个数值变量间关系的强度。&#xff08;两个数值型变量之间的关系&#xff09; &#xff08;1&#xff09;图表表示&#xff1a;散点图 &#xff08;2&#xff09;衡量关系强度指标&#xff1a;相关系数r。 &#xff08;r的取值为-1到 1&…...

计算机视觉与模式识别实验2-2 SIFT特征提取与匹配

文章目录 &#x1f9e1;&#x1f9e1;实验流程&#x1f9e1;&#x1f9e1;SIFT算法原理总结&#xff1a;实现SIFT特征检测和匹配通过RANSAC 实现图片拼接更换其他图片再次测试效果&#xff08;依次进行SIFT特征提取、RANSAC 拼接&#xff09; &#x1f9e1;&#x1f9e1;全部代…...

kerberos: Clock skew too great (37) - PROCESS_TGS

kerberos认证失败错误信息&#xff1a; Caused by: org.ietf.jgss.GSSException: No valid credentials provided (Mechanism level: Clock skew too great (37) - PROCESS_TGS)at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:772)at sun.security.j…...

【MATLAB高级编程】入门篇 | 向量化编程

【入门篇】向量化编程 1. 什么是向量?2. 向量的创建2.1 行向量2.2 列向量2.3 使用冒号运算符2.4 使用`linspace`和`logspace`3. 向量的基本操作3.1 向量元素访问3.2 向量的长度3.3 向量的加法和减法3.4 向量的点乘和叉乘3.5 向量的元素乘法和除法4. 向量的高级操作4.1 逻辑索引…...

Debezium日常分享系列之:Debezium 2.7.0.Beta1发布

Debezium日常分享系列之&#xff1a;Debezium 2.7.0.Beta1发布 一、重大变化1.快照工件2.Oracle 二、新功能和改进1.在 z/OS 上支持 Db22.NATS JetStream 接收器身份验证改进3.JDBC 接收器 MariaDB 方言支持4.JMX 导出器添加到 Debezium 服务器5.使用 Debezium Operator 启用 J…...

eNSP学习——RIP的水平分割和触发更新

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建RIP网络 3、验证触发更新 4&#xff0e;验证水平分割 5、验证毒性逆转 需要eNSP各种配置命令的点击链接自取&#xff1a;华为&#xff45;NSP各种设备配置命令大全PDF版_…...

华为面经整理

文章目录 实习第一面准备提问相关算法相关 第一面结果提问环节 总结 实习 第一面准备 提问相关 操作系统有哪些功能 进程管理&#xff1a; 进程调度、进程同步和通信、多任务处理 内存管理&#xff1a; 内存分配、虚拟内存技术、内存保护 文件系统管理&#xff1a; 文件存储…...

数据恢复工具推荐:电脑回收站删除的文件怎么恢复?8个回收站恢复软件,收藏!

当文件从电脑的回收站被删除后&#xff0c;许多用户可能认为这些文件已永久丢失。然而&#xff0c;实际上&#xff0c;在数据被新数据覆盖之前&#xff0c;这些删除的文件仍然可以通过使用专门的数据恢复软件来恢复。本文将介绍8款顶级的文件恢复软件&#xff0c;恢复电脑回收站…...

Java 执行字符串 GroovyShell

1...

前端之npm运行时配置文件.npmrc(可用于配置npm淘宝源)

文章目录 前端之npm运行时配置文件.npmrc什么是.npmrc设置项目配置文件设置用户配置文件设置全局配置文件给npm 命令添加注册源选项 前端之npm运行时配置文件.npmrc 什么是.npmrc 官网&#xff1a;https://nodejs.cn/npm/cli/v7/configuring-npm/npmrc/ .npmrc&#xff0c;可…...

如何充分利用代理IP扩大网络接触面

目录 前言 第一部分&#xff1a;什么是代理IP&#xff1f; 第二部分&#xff1a;如何获取代理IP&#xff1f; 1. IP质量 2. 匿名性 3. 限制 第三部分&#xff1a;如何使用代理IP&#xff1f; 第四部分&#xff1a;如何充分利用代理IP&#xff1f; 总结&#xff1a; 前…...

StableDiffusion Windows本地部署

检查电脑环境 启动CMD命令窗。 如上图&#xff0c;在CMD窗口输入python命令&#xff0c;可查看本地安装的python版本信息等。输入exit()退出python命令行 执行where命令&#xff0c;可查看python安装目录。 必须安装Python3.10.x&#xff0c;因为stable-diffusion-webui的一…...

OpenCV学习(4.5) 图像的形态转换

1.目标 在本教程中&#xff1a; 我们将学习不同的形态操作&#xff0c;如腐蚀、膨胀、开、闭等。我们将看到不同的函数&#xff0c;如&#xff1a; cv.erode()**、 **cv.dilate()**、 **cv.morphologyEx() 等。 理论&#xff1a; 图像的形态转换是图像处理中的一个重要领域…...

MFC设置窗口在Z轴上的位置

函数原型&#xff1a; BOOL CWnd::SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags);返回值&#xff1a; 如果函数成功&#xff0c;则返回非零值&#xff1b;否则返回0。 参数&#xff1a; pWndInsertAfter&#xff1a;标识了在Z轴次…...

STM32项目分享:智能门禁锁系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…...

PostgreSQL中有没有类似Oracle的dba_objects系统视图

PostgreSQL中有没有类似Oracle的dba_objects系统视图 在PostgreSQL中&#xff0c;没有一个完全集成了所有对象信息的视图&#xff08;类似于Oracle中的DBA_OBJECTS&#xff09;。但是&#xff0c;PostgreSQL提供了一些系统目录表和视图&#xff0c;可以用来获取数据库对象的信…...

【kubernetes】探索k8s集群的配置资源(secret和configma)

目录 一、Secret 1.1Secret 有四种类型 1.2Pod 有 3 种方式来使用 secret 1.3应用场景&#xff1a;凭据 1.4创建 Secret 1.4.1用kubectl create secret命令创建Secret 1.4.2内容用 base64 编码&#xff0c;创建Secret 1.4.2.1Base64编码 1.4.2.2创建YAML文件 1.4.2.3…...