open/read/write/close等文件相关系统调用接口

文件相关系统调用接口open/write/read/close 1.写(write)#include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<unistd.h>int main() { int fd = open("file",O_WRONLY|O_CREAT,0644);//以只写方式打开或不存在的话创建 if(fd < 0) 阅读详情

1、系统调用
操作系统会对外表现为一个整体,但是会暴露自己的部分接口,这由操作系统提供的部分接口,称为系统调用。
2、库函数
系统调用进行适度封装,从而形成了库,有利于开发者进行二次开发。
下面我们就来解释系统函数与库函数的关系:
在下面这张图我们可以看到操作系统在底层软硬件的分层结构,同时观察到lib库函数所在与系统调用的关系,显然他们是上下级的关系,lib是对系统调用的二次封装,方便二次开发。
这里写图片描述
今天我们就来认识下一些文件相关的系统函数
open、close、write、read等被称为无缓冲I/O(Unbuffered I/O)函数,用户程序在读写文件时既可以调用c标准库函数,也可以直接调用底层的Unbuffered I/O函数。
然而open、close、write、read等系统的函数成为无缓冲I/O函数,那么这些函数的各自的使用场景是什么呢?

  • 用Unbuffered I/O函数每次读写都要进内核,调一个系统调用比调一个用户控件的函数要慢很多,所以在用户程序开辟I/O缓冲区还是必要的,用C标准I/O库函数比较方便。
  • 用C标准I/O库函数要时刻注意I/O缓冲区和实际文件有可能不一致,在必要时调用fflush(3)。
  • UNIX的传统是Everything is a file(一切皆文件),I/O函数不仅可以读写文件还可以读写设备。在读写设备时通常是不希望有缓冲的。比如网络设置的读写就希望是实时读写。
  • C标准库函数是C标准的一部分,而Unbuffered I/O函数是UNIX标准的一部分。只有在UNXI平台上才能用Unbuffered I/O函数,windows上不行。

1. open
这里写图片描述
注释:

1)函数说明:用来打开一个一个已经存在的文件或者用来创建一个普通文件。
2)参数解释:
pathname:文件名
flags:打开文件的方法
mode:若文件不存在,设置新文件的权限
返回值:成功则返回文件描述符,否则返回-1
对于open函数来说,第三个参数仅当创建新文件时(即使用了O_CREAT 时)才使用,用于指定文件的访问权限位。
3) 返回值:成功则返回文件描述符,否则返回-1

flags 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于fcntl.h)通过逻辑位或逻辑构成。

O_RDONLY 只读模式
O_WRONLY 只写模式
O_RDWR 读写模式。
2)flags:

打开/创建文件时,至少得使用上述三个常量中的一个。
以下常量是选用的:

O_APPEND 每次写操作都写入文件的末尾 O_CREAT 如果指定文件不存在,则创建这个文件 O_EXCL
如果要创建的文件已存在,则返回-1,并且修改errno的值 O_TRUNC
如果文件存在,并且以只写/读写方式打开,则清空文件全部内容(即将其长度截短为0) O_NOCTTY
如果路径名指向终端设备,不要把这个设备用作控制终端。 O_NONBLOCK
如果路径名指向FIFO/块文件/字符文件,则把文件的打开和后继I/O

2、close
这里写图片描述
注释:
(1)函数说明:关闭指定文件
(2)函数解释:fd—–文件描述符,用来指向要操作的文件的文件结构体
(3)返回值:若成功返回0,失败返回-1;
注意:关闭一个文件时也释放该进程加在该文件上的所有记录锁,当一个进程终止时,它所有的打开文件都由内核自动关闭。
3、read函数
这里写图片描述
注释:
(1)函数说明:是从 fd所描述的打开文件中读取 buf所指缓冲区中的 n个字节。
(2)参数说明
fd:文件描述符,用来指向要操作的文件的文件结构体
buf:一块内存空间
count:请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移。
ssize_t:有符号整型
(3)返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调用read之前已到达文件末尾,则这次read返回0。
注意:读操作从文件的当前位移量处开始,在成功返回之前,该位移量增加实际读的字数

#include <stdio.h>
  2 #include <unistd.h>
  3 
  4 int main(){
  5     char buf[1024];
  6     ssize_t s=read(0,buf,sizeof(buf)-1);
  7     //从屏幕上读取数据,包括换行符
  8      printf("%d\n",sizeof(buf)-1);
  9      printf("s=%d\n",s);
 10      buf[s]=0;
 11      printf("%d\n",strlen(buf));
 12      printf("%d\n",sizeof(buf));
 13      return 0;
 14 }           

这里写图片描述

read时如果fd中的数据小于要读取的数据,就会引起堵塞,可以添加换行符)(回车)就不会引起堵塞了。从终端设备读,通常以行为单位,读到换行符就返回,换行符也算读到的内容。

4、write
这里写图片描述
注释:
(1)函数说明:将buf所指向的缓冲区的n字节写入fd所描述的打开文件中
(2)参数说明:
fd文件指针
作用: 把buf中的nbyte大小的数据写入fd
返回值: 写入文档的字节数(成功);-1(出错)
write函数把buf中nbyte写入文件描述符handle所指的文档,成功时返回写的字节数,错误时返回-1.

linux系统高级编程 linux下高级编程的特点;涉及到内核向用户空间提供的接口(函数) 接口的功能 参数 返回值 I/O 文件IO 是从用户空间角度考虑的输入输出 从内核读数据或从文件中读数据叫 输入 read函数 写数据到内核或写数据到文件中叫 输出 write 函数 打开或创建一个文件 open函数 关闭一个文件 close函数 open(char*,flag,mode) char* 要打开的... 阅读详情

相关推荐

【线粒体基因组数据提交实战】从注释校验到GenBank批量入库的避坑指南

本文详细介绍了线粒体基因组数据从注释校验到GenBank批量上传的全流程避坑指南。重点解析了GB2sequin工具的正确使用方法、TBL注释文件的精修技巧,以及BankIt平台提交的隐藏要点,帮助科研人员高效完成NCBI数据提交,特别适合需要批量上传线粒体基因组数据的研究者。

weixin_28726671的博客 443

高编基本函数open/close,read/write的应用

经过一个多月的学习,终于进入Linux系统函数(高编)的学习,所有I/O操作最终都是在内核中做的,以前我们用的C标准I/O库函数最终也是通过系统调用把I/O操作从用户空间传给内核,然后让内核去做I/O操作。 1)首先介绍了C标准I/O库函数和Unbuffered I/O函数 看了看C标准库函数是如何用系统调用的,以写文件为例,C标准I/O库函数(printf(3)、putchar(3)、f

程序人生 2226

Android开发必备:TBS腾讯浏览服务静态集成完整指南(附Demo下载)

本文详细解析了Android开发中TBS腾讯浏览服务的静态集成方案,通过对比动态集成,深入剖析了其核心原理与适用场景。文章提供了从环境准备、资源获取、项目配置到代码初始化的完整指南,并重点介绍了WebView与文件预览等高级特性的实战应用。针对集成过程中的常见问题,提供了详尽的排查清单与性能调优建议,旨在帮助开发者构建极致稳定、不依赖网络的WebView与文件预览功能。文末附有经过验证的Demo项目可供下载参考。

earth的博客 369

C语言open,read,write函数,及文件读写

open头文件:#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>定义函数: int open(const char * pathname, int flags); int open(const char * pathname, int flags, mode_t mode);函数说明:参数 pat

centor的博客 2万+

Python连接高斯数据库踩坑实录:从SASL报错到SSL安全连接的完整指南

本文详细记录了Python连接高斯数据库时遇到的SASL authentication报错及其解决方法。通过剖析SASL认证机制,对比了修改数据库配置、使用官方驱动等方案的利弊,并重点提供了通过自动化脚本生成SSL证书,实现安全、免密连接的完整指南,帮助开发者彻底解决连接难题。

weixin_28340315的博客 438

ESP32-C3模组上跑通HTTPS分次传输文件(1)

ESP32-C3模组上跑通HTTPS分次传输文件(1)

phmatthaus的专栏 760

IO:open/read/write/close等文件相关系统调用接口

标准库IO接口: fopen fseek fwrite fread close fprintf sprintf snprintf printf fgets fopen (file, “r r+ w w+ a a+”); r: 若文件存在则以只读方式打开.不存在报错 r+: 若文件存在则以只读写方式打开,不存在报错 w: 若文件不存在则创建,否则清空原有内容,以只写打开. w+ : 若文件...

WKH 2155

uniapp - 解决报错Error in event handler for “service.requestComponentInfo“: “TypeError: cannot read prop

uniapp,报错,Error in event handler for "service.requestComponentInfo": "TypeError: cannot read properties of undefined (reading 'matches')",h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,如何解决这个问题,一直报错,uniapp报错Error,都检查了还是报错,怎么解决这个错误,uniapp出现Error in event han

🏆 前端领域优质创作者 6379

Linux相关概念和易错知识点(17)(文件、文件的系统调用接口、C语言标准流)

这显然需要每个进程的共同作用。并且还有一些文件相关的属性等也都需要单独维护,这就是files_struct干的事情了。

SGlow0708的博客 905

图像分割 - 使用Mask R-CNN模型在COCO数据集上进行图像分割任务

图像分割是计算机视觉领域的一个重要任务,它旨在将图像中的每个像素分类为对象或背景。Mask R-CNN是一种基于区域的卷积神经网络,可用于图像分割任务。它是Faster R-CNN的扩展,将目标检测与图像分割结合起来,能够同时检测和分割对象。在本博客中,我们将使用Mask R-CNN模型在COCO数据集上进行图像分割任务。我们将介绍如何下载和准备COCO数据集,以及如何使用Mask R-CNN模型进行训练和推理。

斌擎科技 1189

Dify之八添加各种在线大模型

Dify之八添加各种在线大模型

yilvyangguang520的博客 941

对于标准IO库接口 & 系统调用接口的介绍及用法总结

一.标准IO库接口的介绍: 1.标准库IO接口的分类: (1)fopen:打开文件; 接口:FILE *fopen(const char *path, const char *mode); 参数: path:文件路径; mode:文件打开方式; r:只读方式打开文件,读的位置在文件的起始位置; r+:可读可写方式打开文件,文件的读写在文件的起始位置; w:只写方式打开文件,若文件不存在则创建,若...

DX_Jone的博客 682

2026年中科曙光嵌入式笔试试卷带答案

2026年中科曙光嵌入式笔试试卷涵盖数字电路、总线协议、时序分析、存储原理及硬件寄存器操作等核心知识点。单选题聚焦SPI/I2C差异、建立/保持时间、ADC作用等基础概念;多选题考察时序约束、非易失存储、BMC功能等综合应用;判断题强化对关键术语的理解;填空题考查基本术语记忆;简答题要求掌握SPI与I2C对比、时序违例后果及BMC管理机制。试题紧扣嵌入式系统开发实际,突出接口协议、时序设计与硬件交互能力,是嵌入式岗位选拔的重要依据。

Open 23

练习open/read/write/close等文件相关系统调用接口,纵向对比fd与FILE结构体

写文件#include&lt;stdio.h&gt;#include&lt;sys/types.h&gt;#include&lt;sys/stat.h&gt;#include&lt;fcntl.h&gt;#include&lt;string.h&gt;int main(){ umask(0);//在创建新文件或目录时屏蔽掉新文件或目录不应有的访问允许权限 int fd = open("file",...

qq_40995354的博客 438

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux 了解open/read/write/close等文件相关系统调用接口,纵向对比fd与FILE结构体

熟悉open/read/write/close等文件相关系统调用接口1、open函数#include&lt;sys/types.h&gt; #include&lt;sys/stat.h&gt; #include&lt;fcntl.h&gt; int open(const char *pathname,int flags); int open(const char *pathname,int fl...

雪碧柠七的博客 392

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Linux中基础IO部分--open/read/write/close等文件相关系统调用接口,纵向对比fd与FILE结构体

int open(const char * pathname,int flages,mode_t mode) pathname:带路径的文件名 mode:若有可能创建新文件则需要指定文件权限 flags:选项参数 必选项:O_RDONLY/O_WRONLY/O_RDWR 只读/只写/可读可写 --三种只能选择其一 可选项: O_CREAT 文件不存在则创建新文件,存在则打开(使用这个必须用mod...

qq_44783220的博客 283

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Linux -文件I/O操作

文件不存在则创建新文件)、“a”(追加,写入的数据会被追加到文件尾,如果文件不存在则创建新文件)、“r+”(读写,文件必须存在)、“w+”(读写,同上,但文件内容会被清空)、“a+”(读写,写入的数据会被追加到文件尾)等。flags:用于指定文件如何被打开或创建,例如O_RDONLY(只读)、O_WRONLY(只写)、O_RDWR(读写)、O_CREAT(如果文件不存在则创建)、O_TRUNC(如果文件已存在且为只写或读写模式,则长度截断为0)等。它从一个数组中获取数据,并将数据写入到文件中。

2301_79274600的博客 1207

Linux 基础IO(上)--文件与文件描述符fd

在生活里,我们常和各种文件打交道,像用 Word 写文档、用播放器看视频,这些操作背后都离不开文件的输入输出(I/O)。在 Linux 系统中,文件 I/O 操作更是复杂且关键。 接下来我们将深入探讨Linux 基础 IO,不仅包含了 C 语言文件 I/O 操作函数,如打开文件的fopen、读取文件的fread等常见接口,还详细讲解了系统文件 I/O 的函数和原理,以及文件描述符、重定向、缓冲区等重要概念(内容太多了,分成两篇博客介绍)。

hi0_6的博客 1657

Linux -- 文件描述符和重定向

pathname:要打开或创建的目标文件flags:打开文件时,可以传入多个参数选项O_RDONLY:只读打开O_WRONLY:只写打开O_RDWR:读,写打开以上三个常量(宏)必须指定一个并且只能指定一个O_CREAT:若文件不存在,则创建它。需要使用mode选项来指明新文件的访问权限O_APPEND:追加写成功:新打开的文件描述符失败:-1。

m0_73573757的博客 1150

Linux文件IO与目录IO编程深度解析:从系统调用到实战应用

本文系统介绍了Linux系统编程中的文件IO与目录IO操作。主要内容包括:1)文件IO基础,对比文件IO与标准IO差异,解析文件描述符概念;2)文件IO核心函数详解,涵盖open/close/read/write/lseek等系统调用;3)实战应用示例,如图片拷贝和文件大小统计;4)目录操作函数,包括opendir/readdir/mkdir等;5)时间处理接口,如time/localtime/mktime等。通过代码示例演示了各函数的实际应用场景,为Linux系统编程提供了实用参考。

2302_80623234的博客 1035

文件 IO、目录操作与文件属性

系统调用 IOopenclosereadwritelseek,直接操作文件描述符,无缓冲区。文件权限:由决定,用rwxrwxrwx表示。目录操作opendirreaddirclosedir,遍历目录并处理文件类型。文件属性stat函数获取文件详细信息,解析st_mode得到类型和权限。流与 fd 转换fdopen和fileno实现标准 IO 与系统 IO 的互通。

zb832215csdn的博客 305

怎样查看计算机文件描述符,[wiki]文件描述符(File Description)

概要文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向为每一个所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符.在中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于、这样的操作系统。优点文件描述符的优点主要有两个:基于文件描述符的兼容标准。在UNIX、Linux的系统调用中,大量的系统调用都是...

weixin_28909295的博客 675

Linux基础IO

文章目录Linux基础IOC语言文件IOC语言文件操作库函数stdin&stdout&stderr系统文件IOopenclosewriteread文件描述符文件描述符的分配规则重定向输出重定向追加重定向输入重定向dup2FILEFILE中的文件描述符FILE中的缓冲区文件系统inode磁盘的概念磁盘分区与格式化软硬链接软链接硬链接 Linux基础IO C语言文件IO C语言文件操作库函数 C语言文件操作的库函数有很多,在前面的文章中已有介绍,如果不太清楚的小伙伴可以去看一下作者的这篇文章:

weixin_51885188的博客 1409

系统调用——open、write、read和close

一、文件描述符 每一个进程都有一个与之相关的文件描述符,它们是一些小值整数,我们可以通过这些文件描述符来访问打开的文件。 一般地,一个程序开始运行时,会自动打开3个文件描述符: 0——–标准输入———-stdin 1——–标准输出———-stdout 2——–标准错误———-二、write系统调用1.write系统调用的原型:#include <unistd.h>size_t write(

帅气的羊的博客 1万+
上一篇: 数据结构------单链表相关的面试题
下一篇: fd(文件描述符)与FILE结构体
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值