Linux文件操作——标准c库对文件操作

Linux、标准c库对文件操作的区别

1.来源

从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别:

  • open是UNIX系统调用函数 (包括LINUX等) ,返回的是文件描述符 (File Descriptor),它是文件在文件描述符表里的索引
  • fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针

2.移植性

  • 这一点从上面的来源就可以推断出来,‘fopen’是C标准函数,因此拥有良好的移植性,而‘open’是UNIX系统调用,移植性有限。
  • 如windows下只能运行’fopen‘,但无法运行‘open’,若想要在windows下运行‘open’,则只能在windows下相似的功能使用API函数 ‘CreateFile’。

3.适用范围

  • open返回文件描述符,而文件描述符是UNIX系统下的一个重要概念,UNIX下的一切设备都是以文件的形式操作。如网络套接字、硬件设备等。当然包括操作普通正规文件 (Regular File)。(一些特定情况下只能用open)
  • fopen是用来操纵普通正规文件 (Regular File) 的
  • 两者都能操纵普通正规文件,但通常推荐fopen

4.文件IO层次

  • 如果从文件I0的角度来看,前者属于低级I0函数,后者属于高级I0函数。低级和高级的简单区分标准是:谁离系统内核更近。低级文件IO运行在内核态,高级文件IO运行在用户态。

5.缓冲

  • 1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个"缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”,装满后再从内存“缓冲区”依此读出需要的数据。执行写文件的操作时,先将数据写入内存"缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存“缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件"缓冲区”的大小随机器 而定。fopen,fclose,fread,fwrite,fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等
  • 2.非缓冲文件系统缓冲文件系统是借助文件结构体指针来对文件进行管理,通过文件指针来对文件进行访问,既可以读写字符、字符串、格式化数据,也可以读写二进制数据。非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。open,close,read,wr

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python学习---基于TCP的模拟浏览器请求响应案例

模拟浏览器请求web服务器的网页过程,使用TCP实现http协议 # 1 、导入模块 import socket# 2 、创建套接字 tcp_client_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 3建立连接 tcp_client_socket.connect(("www.icoderi.com", 80)) # 4…

自回归模型(二):具有自回归误差的回归

让我们考虑一个问题,其中我们有一个y变量和多个x变量,它们都被测量为时间序列。举个例子,我们可以将y设定为高速公路上每月的事故数量,而x则表示每月在高速公路上的交通量,观测时间为连续的120个月。一个多元&#xff…

使用 MPI 做 3D 带状矩阵的转置

目的:整个大矩阵从 [Nx, Ny, Nz] 转到 [Nz, Nx, Ny] 每个进程的输入:大矩阵的 [Nx / total_proc_num, Ny, Nz] 的部分 每个进程的输出:大矩阵的 [Nz / total_proc_num, Nx, Ny] 的部分 一开始我大概有一个想法,假设两个进程的话…

Web学习篇

(本文仅为学习记录,请不要做违法犯罪行为) 目录 一、SSH远程攻击 二、sql注入 三、xss漏洞 四、文件上传漏洞 五、文件包含漏洞 一、SSH远程攻击 攻击机:192.168.xxx.130 靶机:10.133.xxx.159(目标主机) 0、信息收集,端口扫描(发现22端口开放,尝试爆破ssh)…

java单元测试:JUnit测试框架

JUnit是Java语言中最常用的单元测试框架之一,用于编写和运行可重复的测试。它的主要功能是帮助开发者验证代码的正确性,确保代码在变更后仍然工作正常。以下是关于JUnit的详细介绍: 1. JUnit简介 JUnit是一个开源的单元测试框架&#xff0c…

HTTP 请求的完整过程

HTTP 请求的完整过程 当用户在浏览器输入网址回车之后,网络协议都做了哪些工作呢? 首先工作的是 浏览器应用程序,他要解析出 URL中的域名 根据域名获取对应的ip地址,首先从浏览器缓存中査看,如下可以査看浏览器中域名对应ip的解…

想当安卓开发工程师?学习路线分享!

安卓开发学习路线 在前几篇文章中,对安卓开发岗位的岗位要求做了一些科普,本节文章将介绍安卓开发岗位的学习路线。 目前,网络上有很多面经、算法题解、算法课等学习资料,如何合理利用这些资料成为技术求职者的一大困惑。笔者整理了一份安卓开发岗位学习路线供大家参考,…

(1)无线电失控保护(一)

文章目录 前言 1 何时触发失控保护 2 将会发生什么 3 接收机配置

两篇文章讲透数据结构之堆(一)!

目录 1.堆的概念 2.堆的实现方式 3.堆的功能 4.堆的声明 5.堆的实现 5.1堆的初始化 5.2堆的插入 5.2.1向上调整算法 5.2.2堆的插入 5.3堆的删除 5.3.1向下调整算法 5.3.2堆的删除 5.4获取堆顶元素 5.5获取堆的元素个数 5.6判断堆是否为空 5.7打印堆 5.8建堆 …

[BT]小迪安全2023学习笔记(第29天:Web攻防-SQL注入)

第29天 盲注 基于布尔 ?id1 and length(database())7通过AND,当数据库名字长度等于7时返回正常页面,否则返回其他(或错误)页面 其他函数: left(databse(),a):截取数据库名的左侧前a位字符 substr(a,b,c…

亚马逊自养号测评环境搭建技巧:打造防关联底层环境的关键步骤

今天我们要聊的是完全由人工操作的自养号方法,相信有过相关经验的朋友们都清楚,在实现自养号的过程中,所使用的 IP 和浏览器究竟有哪些选择,以及可能会遇到哪些问题。 首先,我们来看看市场上现有的 IP 类型以及可能出现…

[LDAP: error code 34 - invalid DN]

目前我的项目版本: Spring版本:5.3.15SpringBoot版本:2.6.3 完整错误 org.springframework.ldap.InvalidNameException: [LDAP: error code 34 - invalid DN]; nested exception is javax.naming.InvalidNameException: [LDAP: error code 34 - invalid DN]at org.s…

zabbix实现企业微信机器人推送

0、前置条件 已经申请到企业微信机器人webhook,参考链接https://developer.work.weixin.qq.com/document/path/91770 1、创建报警媒介类型 在报警媒介类型右上角创建媒体类型 新增Token参数,将申请获得的Token填入 在脚本处填入脚本: 脚…

amtlib.dll打不开怎么办?一键修复丢失amtlib.dll方法

电脑丢失amtlib.dll文件是什么情况?出现amtlib.dll打不开怎么办?这样的情况有什么解决方法呢?今天就和大家聊聊amtlib.dll文件同时教大家一键修复丢失amtlib.dll方法?一起来看看amtlib.dll文件丢失会有哪些方法修复? a…

从旅游广告联想到《桃花源记》

近日收到《长江头条网》等知名网络自媒体相邀,促我写点儿旅游题材的文案。虽说笔者游历过许多名山大川的绝美风景区,但那是在70岁之前的事儿了。如今年逾78岁,纵使有少许自有资本能够支持出游,可体力难撑,岂不是花钱买罪受吗?而且,写没有亲身经历过的事挺难,即便发表出…

leetCode-hot100-数组专题之双指针

数组双指针专题 1.同向双指针1.1例题26.删除有序数组中的重复项27.移除元素80.删除有序数组中的重复项 Ⅱ 2.相向双指针2.1例题11.盛最多水的容器42.接雨水581.最短无序连续子数组 双指针在算法题中很常见,下面总结双指针在数组中的一些应用,主要分为两类…

揭秘k-NN算法:简单技术背后的强大力量

近邻算法(k-Nearest Neighbors, k-NN)是一种基本且常用的分类与回归方法。它的主要特点是模型简单、易于理解,且在许多实际应用中表现良好。本文将详细介绍近邻算法的原理、实现步骤以及优缺点。 1. 原理简介 近邻算法基于一个核心思想&…

WebGL的医学培训软件开发

开发基于WebGL的医学培训软件是一项复杂且技术性强的任务,需要结合医学专业知识和计算机图形学技术。以下是详细的开发流程和关键步骤。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.需求分析与定义 目标用户&#xf…

二叉树——进阶(递归创建,非递归,广度优先,翻转,深度,对称)

二叉树——进阶 二叉树的递归创建非递归前中后序遍历非递归前序遍历非递归中序遍历非递归后序遍历 广度优先遍历二叉树(层序遍历)翻转二叉树 二叉树深度最大深度最小深度 对称二叉树 二叉树的递归创建 1,二叉树是一种结构相对固定的数据&…

【Rust日报】函数指针与闭包的区别

函数指针与闭包的区别 在 Rust 中,函数指针用于直接指向一个确定签名的函数,适用于不需要捕获外部环境的场景。相对闭包来说,函数指针语法简单,性能略高但不能保持状态。闭包则功能更强大,能够捕获和使用其定义时的环境…