unix环境高级编程-文件读取,同步机制

UNIX环境高级编程重点复习 文章目录名词解释题简答题程序题书上例程读程序写结果改错写程序论文《The Three Pillars of Machine Programming》相关论文《pix2code: Generating Code From a Graphical User》、sketch2code相关小组项目相关 名词解释题 1.内核(kernel): 内核是一种软件,它控制计算机硬件资源,提供程序运行环境。内核通常... 阅读详情

3.12 dup和dup2函数

下面的两个函数用来赋值一个现存的文件描述符

#include<unistd.h>

 int dup(int filedes); 

int dup2(int filedes,int filedes2);

成功则返回新的文件描述符,若出错则返回-1;

 

查看了gun c手册
int dup (int old) [Function]
This function copies descriptor old to the first available descriptor number (the first
number not currently open). It is equivalent to fcntl (old, F_DUPFD, 0).
int dup2 (int old, int new) [Function]
This function copies the descriptor old to descriptor number new.
If old is an invalid descriptor, then dup2 does nothing; it does not close new. Otherwise,
the new duplicate of old replaces any previous meaning of descriptor new, as if
new were closed first.
If old and new are different numbers, and old is a valid descriptor number, then dup2
is equivalent to:
close (new);
fcntl (old, F_DUPFD, new)
However, dup2 does this atomically; there is no instant in the middle of calling dup2
at which new is closed and not yet a duplicate of old.

 

dup返回的描述符一定是当前可用文件描述符忠最小的数值,用dup2则可以返回filedes2参数指定新描述符的数值。若果filedes2已经打开,则先关闭。如果相同,则不关闭他。

如下图

 

这些函数返回的新文件描述符与参数filedes共享同一个文件表项。他们都共享同一个文件状态标志(读写等)以及同一当前文件偏移量。

复制一个描述符的另一种方法是使用fcntl函数,调用

dup(filedes)

等效于

fcntl(filedes,F_DUPFD,0);

而调用

dup2(filedes,filedes2);

等效于

close(filedes2);

fcntl(filedes,F_DUPFD,filedes2);

 

3.13 sync、fsync、和fdatasync函数

传统的UNIX实现在内核忠设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓存进行。当数据文件写入文件中,内核通常先将该数据复制到其中一个缓冲区中,如果改缓冲区尚未写满,则并不将其排入输出队列,二师等待期写满或者内核需要改缓冲区。再将该缓冲区的数据输出。然后待其达到队首时候,才进行实际的I/O操作。这叫延迟写(delayed write)

优点:减少了写的次数。缺点:降低了文件内容更新速度。一旦出现故障,可能一些数据未写进文件。

所以这时候unix提供了三个函数 sync,fsync,fdatesync 三个函数

#inclued<unistd.h>
int fsync(int fileds);
int fdatesync(int filedes);
void sync(void);

下面查阅一下GUN C手册
int sync (void) [Function]
A call to this function will not return as long as there is data which has not been
written to the device. All dirty buffers in the kernel will be written and so an overall
consistent system can be achieved (if no other process in parallel writes data).

 

int fsync (int fildes) [Function]
The fsync function can be used to make sure all data associated with the open file
fildes is written to the device associated with the descriptor. The function call does
not return unless all actions have finished.
A prototype for fsync can be found in ‘unistd.h’.
This function is a cancellation point in multi-threaded programs. This is a problem
if the thread allocates some resources (like memory, file descriptors, semaphores or
whatever) at the time fsync is called. If the thread gets canceled these resources stay
allocated until the program ends. To avoid this, calls to fsync should be protected
using cancellation handlers.
The return value of the function is zero if no error occurred. Otherwise it is

深入UNIX环境的高级编程实践指南 Unix/Linux系统编程是构建在操作系统提供的底层接口之上的高级编程技术,它允许程序员编写更为接近硬件的代码,以实现高效的资源管理和任务执行。本章将为读者概述系统编程的基础知识,包括进程管理、文件I/O、信号处理以及网络通信等关键概念。通过本章节的介绍,我们深入了解了文件I/O的基本操作、高级技术、文件系统的层次结构和性能调优方法。掌握这些知识对于进行高效和安全的文件管理至关重要。接下来,我们将继续探讨进程管理与控制的相关技术,进一步提升我们的系统编程能力。 阅读详情

相关推荐

Unix环境高级编程:源代码与实例分析

本文还有配套的精品资源,点击获取 简介:《UNIX环境高级编程》是UNIX系统编程的权威指南,包含了大量的编程技术和实践方法。本书的源代码和实例对于理解UNIX编程理论至关重要,通过实际操作加深对系统工作原理的认识。源代码涵盖进程管理、文件系统、网络编程等核心主题,是学习UNIX编程的宝贵资源。源代码和实例不仅加深理解,还能提升编程和调试技能,适用于UNIX和类UNIX系统...

weixin_35516273的博客 1174

文件IO---sync、fsync、fdatesync

在使用write函数向文件中写入数据的时候,并不是在调用了函数以后就直接把数据写入磁盘;操作系统在内核中设置了一块专门的缓冲区,数据会先被写入到内核的缓冲区中,等到缓冲区满了或者系统需要重新利用缓冲区的时候才会将缓冲区的数据排入到写队列中去,待到达对首的时候,就将数据写入到磁盘中。这就是延迟写,因为不是马上将更改后的数据刷入到磁盘中,所以就会导致缓冲区中的数据和磁盘中的数据不一致。 ======...

巧克力脆片 621

全面掌握UNIX系统高级编程技巧

本文还有配套的精品资源,点击获取 简介:《UNIX环境高级编程》是一本面向有操作系统基础的读者的编程指南,详细讲述UNIX系统编程的核心概念和技术。本书涵盖系统调用、文件I/O、进程管理、信号处理、内存管理、线程编程、网络编程、进程间通信、错误处理及shell脚本编程等关键知识点,旨在帮助读者深入理解UNIX底层原理,并能够开发出高效、稳定的UNIX应用程序。 1...

weixin_35578748的博客 914

将数据写入文件的系统调用

数据同步与持久性保证; fdatasync/fsync/syncfs/sync

白日梦~ 592

UNIX环境高级编程实战教程中文版

htmltable {th, td {th {pre {简介:《UNIX环境高级编程》是UNIX和Linux开发者的经典教材,深入讲解UNIX系统编程技术与实践。Stevens所著的这本书详细介绍了进程管理、文件系统、I/O操作、信号处理等UNIX基础概念,并提供了对进程间通信、文件操作、异步I/O、信号处理和网络编程的深入解析。本书旨在帮助读者理解操作系统内核与用户空间的交互,编写高效、稳定的系统级程序,并掌握UNIX编程的核心知识。

weixin_33557333的博客 703

Unix平台文件传输程序使用说明

Unix平台文件传输程序使用说明程序名称: 隔离装置专用数据传输程序(Unix平台版) 功能: 以单向数据的方式将客户端数据传输给服务端,用于文件传输。 包含文件: client.c:客户端程序代码 server.c:服务端程序代码 header.h:共用头文件 Makefile:编译用规则文件 demo: 演示用shell脚本文件

笔记 --持续更新

1、地址总线,控制总线,数据操作,用于cpu控制内存。 系统结构: I/O桥南桥接低速,北桥接高速设备。 实际场景:当我们运行一个程序,cpu发中断信号,然后首先把程序读到内存中来。 读到内存这一步不需要cpu直接干预,由dma机制(直接内存存取)完成,磁盘控制器通过dma控制器接管总线从 磁盘中读数据到内存。 2.一开始没有进程的概念,有了中断之后出现分时操作系统。 任务...

挪威的森林 311

从“跳变”到“连续”:深入理解霍尔传感器插值与PLL角度估算的优劣与选择

本文深入解析霍尔传感器角度估算技术,对比线性插值法和锁相环(PLL)跟踪法的优劣,为电机控制领域的工程师提供实用指南。通过STM32F407和CubeMX的实例,详细探讨两种方法的实现细节、性能对比及优化策略,帮助在不同应用场景下做出最优选择。

weixin_30855761的博客 557

UNIX环境高级编程

转自:unix环境高级编程 I/O 文件系统 进程 线程 进程间通信 一.文件I/O三.标准I/O库八.高级I/O 二.文件和目录 四.进程环境五.进程控制 六.线程七.线程控制 九.进程间通信十.信号 一.文件I/O 1.文件描述符 2.相关调用 2.1 打开文件 2.2 创建文件 2.3 关闭文件 2.4 定位读写位置 2.5 文件读 2.6 文件写 2.7 fcntl函数 3.进程间文件共享 4.原子操作 5.数据同步 二.文件和目录 前言:文

qq_39815320的博客 3617

西门子1500 PLC与巴鲁夫RFID实战:从硬件接线到数据读写的完整流程

本文详细介绍了西门子S7-1500 PLC与巴鲁夫RFID系统集成的完整实战流程。内容涵盖从硬件选型、接线、PROFINET网络配置,到在TIA Portal中安装GSD文件、组态设备、分配地址,再到使用标准功能块(如FB31)进行程序架构设计、实现数据读写以及错误诊断。文章重点分享了硬件连接要点、软件配置步骤、数据块管理技巧以及调试中常见问题的解决方案,为工业自动化工程师实施RFID项目提供了清晰的指导。

weixin_29161785的博客 385

深信服技术认证“SCCA-C”划重点:信服云托管云

该认证包括云数据中心基础、云计算基础、云计算关键技术、云计算交付和运维体系、云计算技术商业应用、信服云托管云、深信服超融合HCI、深信服桌面云aDesk、深信服分布式存储EDS、深信服应用交付AD。学习并获得SCCA-C认证后,可以具备深信服产品功能原理与实践,能够根据业务需求,协助完成云产品方案落地与实施;能够根据业务需求,完成深信服云产品的部署和管理的基本工作。为帮助大家更加系统化地学习云计算知识,高效通过云计算工程师认证,深信服特推出“SCCA-C认证备考秘笈”,共十期内容。

sangfor_edu的博客 613

《UNIX 环境高级编程(第 3 版)》剖析

UNIX 环境高级编程(第 3 版)》作为 UNIX 编程领域的经典之作,不仅涵盖了 UNIX 系统编程的各个方面,还通过大量的代码示例和深入的讲解,帮助读者深入理解 UNIX 系统的底层机制,掌握编写高效、可移植的 UNIX 应用程序的技巧。无论是对于初学者还是有一定经验的开发者,本书都具有极高的学习价值和参考价值。随着技术的不断发展,UNIX 系统也在不断演进,新的特性和功能不断涌现。

数字魔方操控师的博客 1088

Cursor Agent模式下如何优雅切换conda环境运行Python脚本?3种实用方法实测

本文针对Cursor Agent模式下运行Python脚本时环境错配的痛点,实测了三种优雅切换conda环境的实用方法。通过Shell全局配置、项目级.cursorrc文件定制以及对话中直接指令,开发者可以确保AI助手在正确的虚拟环境中执行代码,从而提升开发效率和协作流畅度。

redis7keeper的博客 597

【UNIX环境高级编程】文件和目录详解

嵌入式-UNIX-文件和目录详解

weixin_39723539的博客 1156

华为[ENSP]OSPF的配置实例(单区域+多区域)

华为[ENSP]OSPF的配置实例(单区域+多区域)

weixin_62594100的博客 2万+

【数据库系统工程师】5.4Internet基础知识

目录一、思维导图二、知识点1.Internet 概述2.Internet 地址(1)域名(2)IP 地址(3)NAT技术(4)IPv6简介3.Internet 服务(1)域名服务(2)远程登录服务(3)电子邮件服务(4)WWW服务(5)文件传输服务 一、思维导图 二、知识点 1.Internet 概述 2.Internet 地址 (1)域名 ○ 一个完整、通用的层次型主机域名由如下4部分组成: 计算机主机名.本地名.组名.最高层域名 (2)IP 地址 ○ 每个IP地址都由4个小于256的数字组成,数字之

邓邓子的博客 911

《UNIX环境高级编程》概述及文件目录

主要就是操作系统原理。

iamXiaolan 1140

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

Autosar CAN 网络管理测试用例(3)——Repeat Message Timer 时间测试

蚂蚁小兵 2465

1 Studying《Unix环境高级编程》

启用进程会计选项后,当进程结束后内核会写一个会计记录。会计记录一般包括命令名,使用的CPU时间总量,用户ID,组ID和启动时间等。root用户可以执行accton命令来启用会计处理。会计记录邪道指定的文件中,linux中该文件是/var/account/pacct。

u012906122的专栏 995

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

【UNIX环境高级编程】文件IO详解

嵌入式-UNIX-文件IO详解

weixin_39723539的博客 825

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

《UNIX 环境高级编程》学习笔记——文件和目录

UNIX环境高级编程——文件和目录函数 stat、fstat、fstatat 和 lstat文件类型设置用户ID和设置组ID文件访问权限新文件和目录的所有权函数 access 和 faccessat函数 umask函数 chmod、fchmod 和 fchmodat粘着位函数 chown、fchown、fchownat 和 lchown文件长度文件系统函数 link、linkat、unlink、unlinkat 和 remove函数 rename 和 renameat符号链接创建和读取符号链接文件的时间函数

weixin_45243288的博客 939

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: unix环境高级编程-3.11-原子操作
下一篇: unix环境高级编程-文件和目录-stat,fstate,lstat函数
ctreewang
博客等级 码龄16年 1608粉丝 276原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值