文件I/O

Win7/10/11文件拖拽导致资源管理器闪退问题 最近老是遇到把文件从资源管理器拖动到微信或者浏览器时,资源管理器直接闪退的问题,一开始在公司遇到了还以为是电脑配置太低,直到被封闭在家办公,发现自己的高级电脑也有这个问题,那就来了解了解问题是出在什么地方把。 阅读详情

文件I/O #include <unistd.h>

①、不带缓冲,每个read/write都调用内核中的相应系统调用
②、通过文件描述符来访问文件
常用文件I/O函数: open() /creat() .  close(). read(). write(). lseek()

文件描述符: 是一个非负整数。当打开一个现存文件或创建一个新文件时,内核向进程返回一个文件描述符。对于内核而言,所有打开文件都由文件描述符引用,当读写一个文件时,用open或creat返回的文件描述符标识该文件,将其作为参数传递给read或write。
1、open 和creat
调用返回的文件描述符一定是 最小的未用描述符数字
creat() 等价于open(pathname , O_CREAT|O_WRONLY|O_TRUNC,mode)
open()可以打开设备文件,但是不能创建设备文件,设备文件必须用mknod() 创建
ps: int mknod(const char *pathname, mode_t mode, dev_t dev);
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

	flags:O_RDONLY:只读方式打开文件
		O_WRONLY:可写方式打开文件
		O_RDWR:读写方式打开文件
		O_CREAT:如果该文件不存在,就创建一个新文件,并用mode参数为其设置权限 0666
		O_EXCL:如果使用O_CREAT时文件存在,则可返回错误消息errno。这一参数可测试文件是否存在。
		O_NOCTTY:如果路径名指向终端设备,不要把这个设备用作控制终端。
		O_TRUNC:文件存在,打开文件删除原有文件数据。
		O_APPEND:已追加方式打开文件,读写操作在文件尾进行。
	mode: 文件存取权限   root user other  0666 以八进制表示
/*临界资源保护*/
if((fd = open(filename , O_WRONLY|O_CREAT|O_EXCL,0644))== -1)
{
	fprintf(stderr , " Cannot open filename  ,please try agin \n");
	exit(-1);
}

2、read
ssize_t read(int fd, void *buf, size_t count);
example:
char buf[100];
read(fd,buf,sizeof(buf));
read调用成功返回读取的字节数,如果返回0,表示到达文件尾,返回-1,表示出错,通过errno设置错误码。
buf参数由调用者分配内存,使用后,由调用者释放。

3、write
ssize_t write(int fd, const void *buf, size_t count);
调用成功返回以写字节数,失败返回-1,并设置errno。
write的返回值通常于count不同,因此要循环将全部的数据写入文件。
注意append参数时,写的文件位置在文件尾。

4、lseek
off_t lseek(int fd, off_t offset, int whence);
调用lseek可显示的定位一个已打开的文件
lseek文件只对常规文件有效,对socket、pipe、fifo等无效

offset: 偏移量
whence:SEEK_SET:文件开头位置
		SEEK_CUR:文件指针的位置
		SEEK_END:文件末尾
返回值: 成功:文件的当前位移
		失败: -1  errno
		ps: 文件的位移量可以大于文件的当前长度,在这种情况下,对该文件的写操作会延长文件,并形成 空洞 。 空洞是否占用硬盘空间是由文件系统(file system)决定的。
		

.空洞文件有什么用?

空洞文件作用很大,例如迅雷下载文件,在未下载完成时就已经占据了全部文件大小的空间,这时候就是空洞文件。下载时如果没有空洞文件,多线程下载时文件就都只能从一个地方写入,这就不是多线程了。如果有了空洞文件,可以从不同的地址写入,就完成了多线程的优势任务。

https://blog.youkuaiyun.com/clamercoder/article/details/38361815

Agent 智能体学习指南:从入门到求职的完整路线 AI Agent 不是更长的 prompt,而是一类系统设计——模型在受控环境里观察状态、选择动作、调用工具、接收反馈。本文系统梳理 Agent 的 5 个核心概念、7 个关键模块(Goal/State/Context/Tools/Loop/Guardrails/Eval)、三条学习路线(工程落地/研究算法/求职作品)、框架选型策略(LangGraph/OpenAI Agents SDK/Pydantic AI 等场景推荐),以及可执行的 7 天最小项目计划(从概念到简历 bullet)。 阅读详情

相关推荐

《通信工程施工与管理》

制作馈线接头必须使用专用的工具,专用工具包括:馈线切割刀、馈线安全刀、小金属丝毛刷、固定尺寸或大号活动扳手、小号扁锉刀、细齿小手锯、接头扩孔器、3M防水胶或防水接头盒;如图所示,详情如表所示。

2302_78710464的博客 1653

使用串口时O_NOCTTY | O_NDELAY参数作用

Linux打开串口和打开文件一样使用open函数 例如: fd1 = open( "...", O_RDWR | O_NOCTTY | O_NDELAY); 参数: “…” : 文件路径 O_RDWR : 可读可写 O_NOCTTY :该参数不会使打开的文件成为该进程的控制终端。如果没有指定这个标志,那么任何一个 输入都将会影响用户的进程。 O_NDELAY :这个程序不关心DCD信号线所处的状态,端口的另一端是否激活或者停止。如果用户不指定了这个标志,则

weixin_45515270的博客 2万+

WIFI 相关的频偏调试以及天线调试记录

WIFI RF 相关的频偏调试以及天线调试 1,频率误差(Frequency Error) 频率误差(Frequency Error):表征射频信号偏离该信号所处信道中心频率的大小,单位PPM。频偏误差要求范围如下表。 频偏越小越好。PPM的计算公式如下: 问题: 我们ESP8089认证测试的时候频偏测试超了。需要修改哪些呢。 测试频率点在2.411865385GHz 宣称点:2.412GHz 频率偏移计算:{(2.412GHz-2.411865385GHz)÷2...

armkits的博客 1万+

C语言-浅谈文件IO

C语言——文件io

qq_53072415的博客 1513

CS1237卡尔曼滤波实战:如何用24位ADC实现电子秤级精度?

本文详细介绍了如何利用CS1237 24位ADC芯片结合卡尔曼滤波算法实现电子秤级精度测量。通过解析CS1237硬件特性、卡尔曼滤波原理及STM32驱动优化,提供了一套完整的解决方案,包括多通道支持、驱动代码实现和性能调优技巧,适用于工业测量和嵌入式开发领域。

linux的博客 1087

电工识图入门:从电气符号到控制逻辑的完整指南

电工图纸是电气工程领域的通用语言,无论是设备安装、线路检修还是系统设计,看不懂图纸就像航海没有海图。很多初学者面对复杂的电气符号和线路走向感到无从下手,实际上只要掌握正确的识图方法,就能从简单的照明电路逐步过渡到复杂的自动化控制系统。 本文将从最基础的电气符号和图纸类型讲起,通过实际图纸案例解析,带你建立完整的识图逻辑。你将学会如何区分主回路和控制回路,如何追踪电流路径,以及如何结合图纸进行故障排查。无论你是电工新手、设备维护人员还是相关专业学生,这套方法都能帮你快速提升图纸理解能力。 1. 电气图纸基础:

chengyixian7877的博客 337

linux串口属性O_CTTY O_NDELAY

O_NOCTTY:告诉Unix这个程序不想成为“控制终端”控制的程序,不说明这个标志的话,任何输入都会影响你的程序。 O_NDELAY:告诉Unix这个程序不关心DCD信号线状态,即其他端口是否运行,不说明这个标志的话,该程序就会在DCD信号线为低电平时停止。

咔嚓咔嚓咔嚓 2961

热力学仿真软件:SimScale_(1).SimScale入门与基础操作

导航栏:位于页面顶部,包含项目管理、仿真设置、结果分析等主要功能。项目列表:展示用户创建的所有项目。工作区:用于进行具体的操作,如几何建模、网格划分、边界条件设置等。控制台:显示操作日志和仿真进度。网格划分是将几何模型离散化为一系列小单元的过程,这些单元用于求解热力学方程。SimScale提供了多种网格划分方法,包括结构化网格和非结构化网格。SimScale提供了丰富的API接口,用户可以通过编程语言进行二次开发,实现自动化仿真和结果分析。项目管理:创建、删除和管理项目。几何建模:创建、导入和修复几何模型。

kkchenjj的博客 1867

进程的控制终端规则详解(打开串口设备文件时的标志位O_NOCTTY的详解、守护进程的概念)

在Linux的串口驱动开发中,通常都是以TTY框架作为其驱动开发框架。使用 TTY 框架开发串口驱动,可以让串口设备具备标准的终端特性,并能通过 /dev/ttyX 这样的设备文件访问。关于终端的详细解释,请参考我的另一篇博文由于咱们的串口设备的驱动是基于TTY框架开发的,那么咱们打开的一个串口设备,同样也能同时作为串口终端来使用。这一点其实就是咱们本博文中要讲的问题的来源。所以,看下面的内容前,你要谨记,本文下面内容的前提是假设我们的串口驱动是基于TTY的驱动框架开发的。

昊虹AI笔记 1313

【华为OD机试真题 2025C卷】895、贪心歌手 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS)

【华为OD机试真题 2025C卷】895、贪心歌手 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华

KJ.JK 964

MiniQMT国债逆回购策略Python代码全解析

通过本文的介绍,我们不仅学习了如何在MiniQMT平台上使用Python编写国债逆回购策略,还对策略的逻辑构建、代码实现以及风险管理有了深入的了解。国债逆回购策略是一种适合初学者的低风险投资方式,希望本文能帮助你在量化交易的道路上迈出坚实的一步。

木头大左的博客 1919

linux ros USB阻塞与非阻塞记录

一、USB口满足可同时读写,符号标识 O_RDWR : 可读可写O_NDELAY :这个程序不关心DCD信号线所处的状态,端口的另一端是否激活或者停止。如果用户不指定了这个标志,则进程将会一直处在睡眠状态,直到DCD信号线被激活。O_NOCTTY :表示打开的是一个终端设备,程序不会成为该端口的控制终端。如果不使用此标志,任务一个输入(eg:键盘中止信号等)都将影响进程。O_NONBLOCK :阻塞与非阻塞方式标识符 阻塞方式-read- 实现: 在阻塞型驱动程序中,r...

David_BY的博客 1651

YOLOv13教程:手把手教你CSP_MutilScaleEdgeInformationSelect模块 通过DSM 在空间与局部对比域上做自适应选择

绿色线条为添加CSP_MutilScaleEdgeInformationSelect后的训练效果,map50指标提升12.45,准确率提升5.44。

FJN110的博客 816

文件I/O和标准I/O的区别

一、先来了解下什么是文件I/O和标准I/O: 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linix或unix平台。 标准I/O:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件

知秋一叶 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

linux文件I/O

每调用一次 readdir(),就会从 drip 所指向的目录流中读取下一条目录项(目录条目),并返回 struct dirent结构体指针,指向经静态分配而得的 struct dirent 类型结构,每次调用 readdir()都会覆盖该结构。一旦遇到目录结尾或是出错,readdir()将返回 NULL,针对后一种情况,还会设置 errno 以示具体错误。使用opendir()函数打开需要统计的文件所在的目录,返回一个指向目录流的指针。pathname:可以是绝对路径后者相对路径。

TheoryGo的博客 1721

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

文件 I/O

文件 I/O 是系统内核态的调用函数,是标准 I/O 实现的基础,所有的 I/O 操作最后都会调用文件 I/O 相关的函数

jeffery 的博客 1158

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

底层文件I/O和ANSI标准I/O的区别

一、先来了解下什么是文件I/O和标准I/O: 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linix或unix平台。 标准I/O:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头

云鹤起舞的博客 5323

标准I/O与文件I/O的区别

1.来源 文件I/O(低级I/O)是Linux系统调用,通过系统调用来访问文件,返回一个文件描述符,可以直接对文件进行读写。需要进行内核与用户之间的切换。 标准I/O(高级I/O)是c语言的标准库,返回一个指向文件结构的流的指针,建立缓冲区存储文件的数据,流中记录着文件的信息,不在内核上操作,不需要频繁切换。 2.移植性 文件I/O是Linux(Unix)的系统调用操作,移植性较差。 标准I/O是c语言标准库,大多数操作系统上都装备了c库,移植性较好。 3作用范围 文件I/O可以对管道,设备驱动等读写。 标

weixin_48006170的博客 2055

标准I/O和文件I/O的区别

一、标准I/O和文件I/O的定义 标准I/O:标准I/O是ANSI C中定义的用于I/O操作的一系列函数,具有一定的可移植性。标准I/O库处理很多细节。例如缓存分配,以优化长度执行I/O等。标准的I/O提供了三种类型的缓存 全缓存:当填满标准I/O缓存后才进行实际的I/O操作。 磁盘上的普通文件,用标准I/O打开时默认是全缓冲的 行缓存:当输入或输出中遇到换行符时,标准I/O库执行I/O操作。 标准输入/输出流就是使用行缓冲的典型例子 不带缓存:不对I/O操作进行缓冲,即在对流的读写时会立刻操作实际的文件

安迪西_嵌入式攻城狮 1113

嵌入式Linux:文件I/O和标准I/O库

文件 I/O (Input/Output)和标准 I/O 库是用于在 C 语言中进行文件操作的两种不同的方法。

不脱发的程序猿 1192

Linux文件I/O及标准I/O

一、什么是文件I/O与标准I/O 文件I/O:文件I/O的函数通常称之为不带缓存的I/O(unbuffered I/O) 标准I/O:指的是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,其提供三种类型的缓存: 1.全缓存:当填满标准I/O缓存后才进行实际I/O操作。(磁盘上的文件通常由I/O标准可部署为全缓存) 2.行缓存:当输入和输出种遇到换行符或填满缓存...

qq_33949303的博客 412

Linux下标准I/O和文件I/O

Linux系统编程-文件IO、标准库IO、刷新、缓冲模式

m0_38113054的博客 614

Linux文件I/O与重定向

Linux的文件I/O和重定向是系统编程中的基础概念,理解这些概念对于编写高效的系统程序至关重要。文件I/O涉及对文件的直接读写操作,而重定向则允许我们灵活地改变输入输出的流向,从而实现更复杂的操作。

如无必要,勿增实体。 1565

带缓冲I/O与不带缓冲I/O:文件I/O和标准I/O库

介绍标准I/O前,先介绍文件I/O,以便与区别比较。带缓冲和不带缓冲I/O的区别:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲(内核缓冲区)(在有些地方也被称为内核高速缓存),当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是...

amoscykl的博客 832

Scala 文件 I/O

Scala文件I/O操作指南 Scala提供了简洁的文件读写功能,结合了函数式编程特性和Java互操作性。读取文件主要使用scala.io.Source类,支持整个文件读取、逐行处理和编码指定。写入文件则依赖Java的I/O类如PrintWriter和FileWriter,支持追加模式和异常处理。推荐使用Try进行安全操作,并可采用NIO包处理复杂需求。对于大文件,建议使用迭代器逐行处理以避免内存问题。文件操作需注意及时关闭资源和异常处理。

likuoelie的博客 1216

【文件I/O】(二)文件I/O

文件I/O

weixin_50964793的博客 1634
上一篇: UNIX 输入和输出
下一篇: Linux内核0.11完全注释(修正版) --读书笔记(1)
Noneghost
博客等级 码龄10年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值