Unix系统编程文件I/O基础知识

9、深入理解文件描述符 I/O 操作 本文深入探讨了UNIX系统中的文件描述符I/O操作,涵盖基本概念、核心系统调用(如open、read、write、ioctl等)及其使用方法,并详细介绍了在磁带、串口、打印机和声卡等特殊设备上的应用。通过示例代码和流程图,帮助开发者理解底层I/O机制,掌握高效、安全的系统编程技巧。 阅读详情

文件描述符

对于内核而言,所有打开的文件都通过文件描述符引用,文件描述符是一个非负整数,当打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符,当读、写一个文件时,使用open或create返回的文件描述符标识该文件,将其传递给read或write。

按照惯例,UNIX系统shell把文件描述符0与进程的标准输入关联,文件描述符1与标准输出关联,文件描述符2与标准错误关联。在符合POSIX.1的应用程序中,幻数0、 1 、2已被标准化,通常把他们替换成符号常量:STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,这样可以提高可读性,常定义在<unistd.h>中。

#include <fcntl.h>
int open(const char *path, int oflag, ... /*mode_t mode*/);
int openat(int fd, const char *path, int oflag, ... /*mode_t mode*/);

两个函数的返回值:若成功返回文件描述符,若出错,返回-1

path参数是要打开或创建的文件名字,oflag参数可用来说明此函数的多个选项,用下列一个或多个常量进行“或”运算构成oflag参数(这些常量在头文件<fcnttl.h>)中定义:

函数lseek

每个打开的文件都有一个与其相关联的“当前文件偏移量(current file offset)”,它通常是一个非负整数,用以度量从文件开始处计算的字节数,通常读、写操作都从当前偏移量处开始,并使偏移量增加所读写的字节数,按照系统默认设定,当打开一个文件时,除非指定O_APPEND选项,否则该偏移量被设置为0,可以调用lseek显示地为一个打开文件设置偏移量

#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);

若成功,返回新的文件偏移量,若出错,返回-1。

对参数offset的解释与参数whence相关。

1、若whence是SEEK_SET(0),则将该文件的偏移量设置为距文件开始处offset个字节。

2、若whence是SEEK_CUR(1),则将该文件的偏移量设置为其当前值加offset,offset可正可负。

3、若whence是SEEK_END(2),则将该文件的偏移量设置为文件长度加offset,offset可正可负。

若lseek执行成功,则返回新的文件偏移量,为此可以使用下列方式确定打开文件的当前偏移量:

off_t currpos;

currpos = lseek(fd, 0, SEEK_CUR);

这种方式也可以用来确定所涉及的文件是否可以设置偏移量。如果文件描述符指向的是一个管道、FIFO或网络套接字,则lseek返回-1,并将errno设置为ESPIPE。

关于文件偏移量大于文件长度的说明:如果文件偏移量大于文件的长度,对该文件的下一次写,将加长该文件,并在文件中构成一个空洞,这一点是允许的,位于文件中但没有写过的字节都被读为0。

文件中的空洞并不要求在磁盘上占用存储区。具体处理方式与文件系统的实现有关,当定位到超出文件尾端之后写时,对于新写的数据需要分配磁盘块,但是对于源文件尾端和新开始写位置之间的部分(空洞部分)则不需要分配磁盘块。

20、Unix 系统编程基础:文件、重定向与终端控制 本文深入介绍了 Unix 系统编程的基础知识,包括文件的概念及操作、标准输入输出与错误的使用、I/O 重定向机制、文本过滤器的实现、终端控制与转义序列的应用,以及标准错误在日志记录中的重要性。通过具体示例,展示了如何构建文本处理程序并控制终端显示效果,同时探讨了 Unix 系统编程的学习路径和未来发展方向。适合初学者掌握基础并进一步深入学习。 阅读详情

相关推荐

Linux/Unix编程实战教程:深入解析translator源码

在操作系统的领域内,进程是系统进行资源分配和调度的一个独立单位。它代表了程序在执行期间的所有动态变化。进程可以理解为处于活动状态的程序,它包含了一系列的指令集合以及必要的资源,如CPU时间、内存地址空间、文件句柄等。进程的生命周期由创建、运行、等待、终止四个基本状态组成。创建状态是指进程被创建时所处的状态,此时操作系统为其分配了唯一进程标识符PID并建立了进程控制块PCB。运行状态指的是进程正在处理器上执行。当进程需要等待资源时,它会进入等待(阻塞)状态。

weixin_33660045的博客 683

Unix Shell 如何按行读取文件并且解析行

按行读取文件: [code="java"] while read myline do echo $myline done < /etc/passwd [/code] 这段程序就是把输入文件 [b]/etc/passwd[/b]一次输出. 如果我们仅仅需要输出username和home directory呢,这时候就需要解析文件. 每一行大概如下,以:作为列分隔符,第一...

262

关于三维全波电磁场仿真软件CST的安装和问题解决

百度网盘链接:https://pan.baidu.com/s/1RgWr8Qau1EzSOlh29SewFQ提取码:fzza这里是2023版本的CST,需要其他版本的uu们可以去官网或者其他人的网盘下载。

weixin_60728441的博客 3602

Unix系统编程(1) - 文件IO

Unix系统可用的文件IO函数包括打开文件、读文件、写文件等等。1、文件描述符 对于内核来说,所有打开文件都通过文件描述符引用。文件描述符是一个非负的整数,当打开一个现有的文件或者创建一个文件的时候,内核向进程返回一个文件描述符。当读写一个文件时,使用open或create返回文件描述符标识该文件,将其作为参数传给read或write。 POSIX标准程序中0,1,2分别表示标准输入,标准输出,

翼遥君的博客 1987

AD24层次原理图设计避坑指南:如何解决端口连接与自动交叉引用问题

本文深入解析AD24层次原理图设计的核心机制,聚焦端口连接错误、自动交叉引用干扰等常见问题。通过对比自上而下与自下而上设计流程,提供端口类型匹配、命名规范等实用解决方案,并指导如何关闭烦人的红色框线视觉干扰,帮助工程师高效避坑,实现复杂系统的模块化设计。

wdx01234567的博客 615

硬件工程师入门进阶,一文搞懂,看这篇就对了

每家公司的datasheet都有严格的规范,及独特的风格,有时候还会穿插一些原理性的介绍,比如ADI公司的一些ADC/DAC器件资料里面,还会包含AD/DA转换的原理性讲解内容,Datasheet既可以是我们设计上的好帮手,也是学习的好资料。在出货量大的产品中,尽量减少物料种类,比如开头说的,1%的电阻不得不用,那么5%的替换成1%的,物料种类就减少一种,量就大了,能不能争取更优的价格呢?如果说前面学的是内功,那这一关,是招式、是工具的使用,原理图和PCB设计都有对应的工具,教程也很多,且比较容易上手。

一路带飞的博客 5万+

《Unix环境高级编程》学习笔记:从点到面总结

以前在课堂上学习过《Unix初级教程(第四版)》,对于Unix有了一点了解。由于以后使用的需要,要对它进行比较深入的学习,为此需要阅读不少的书籍,这本《Unix环境高级编程》便在此列。希望能通过这本书了解Linux的API,并在这个过程中了解Linux系统的机制。书中内容丰富,有以前了解的,更多的是不了解的。作为第一次阅读,目的不在于事无巨细,过目不忘,而是有个大体了解,从点到面地熟悉这个系统。为

benpaobagzb的博客 1402

评价模型——层次分析法(AHP)与熵权法(EWM)

层次分析法是定性与定量结合的多准则决策、评价方法。将决策的有关元素分解成目标层、准则层和方案层,并通过人们的判断对决策方案的优劣进行排序,在此基础上进行定性和定量分析。它把人的思维过程层次化、数量化,并用数学为分析、决策、评价、预报和控制提供定量的依据。

好好学习 天天向上 2万+

UNIX 环境编程

UNIX 环境编程[原创文章,转载请保持文章完整,并注明出处。更多精彩文章请访问http://blog.youkuaiyun.com/Jupin 或者 http://hi.baidu.com/qiupingwu] 1  UNIX 基础知识 1.1  UNIX 体系结构在严格意义上,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。 一般而言,我们称此种软件为内

T357 Sky 4689

使用CNN/ResNet实现自动调制识别(RML2018.01a)

本文基于RML2018.01a大型数据集,给出CNN及其变体ResNet的信号识别的实现方式(附代码) 目录一、CNN的代码实现1.1 导入包1.2 数据读取及数据集划分1.3 构建CNN模型1.4 模型训练1.5 测试及模型可视化二、ResNet的代码实现 RML2018.01a数据集信息如下: 数据集来源 Over-the-Air Deep Learning Based Radio Signal Classification 调制类型 19种数字调制方式: 32PSK, 16APSK,

QAQIknow的博客 1万+

国产FPGA高云GW1NSR-4C,集成ARM Cortex-M3硬核

从板子整体角度来看,这是一款国产化程度很高的板子,从主控FPGA,到JTAG芯片,存储芯片、电源芯片等,都是使用的国产半导体公司的产品。板子整体尺寸也比较迷你,属于小而美类型的,可以认为是一款FPGA核心板,当然也预留了排针接口,给用户足够的扩展空间。对于想了解高云小蜜蜂SoC软硬件开发,以及对云源软件、MCU开发环境做个深度评测来说足够了。JTAG调试器固件可以增加虚拟串口功能,对于板子本来来说面积不会有改动,只需要添加两根信号线即可。

whik1194的博客 6394

UNIX环境高级编程笔记 目录

每一章的重点会使用加粗字体 第一章:UNIX基础知识:UNIX体系结构;文件和目录;输入和输出;程序和进程;出错处理;信号;时间值;系统调用和库函数 第三章:文件I/O:文件描述符;文件操作函数;文件操作示例;I/O的效率;原子操作;dup()和dup2();fcntl();ioctl();其他函数 第四章:文件和目录:stat()、fstat()、fstatat()和...

aa508508的博客 219

全局–局部傅里叶神经算子(GL-FNO):原理、严格推导与 PINN 混合策略

本文提出了一种全局-局部傅里叶神经算子(GL-FNO)及其与物理信息神经网络(PINN)的结合方法。主要内容包括: 架构设计:GL-FNO包含两个分支 - 全局分支处理低频结构,使用下采样输入;局部分支处理高频细节,使用全分辨率输入。两分支通过自适应门控机制融合。 理论分析:证明了GL-FNO在"低频全局+高频局部"任务上的优势,给出了误差分解和复杂度分析,并推导了与PINN结合时的渐进一致性条件。 实现方法:采用频谱微分计算物理残差,推导了完整的训练流程,包括数据损失与物理损失的联合优

VectorShift的博客 1330

Unix的标准I/O与重定向的若干概念解析

标准I/O与重定向的若干概念 3个标准文件描述符 所有的Unix工具都使用文件描述符0、1和2。如下图所示,标准输入文件的描述符是0,标准输出的文件描述符是1,标准错误输出的文件描述符则是2。Unix假设文件描述符0、1和2都已经被打开,可以分别进行读、写和写的操作。 重定向I/O的是shell而不是程序 通过使用输出重定向标志,命令cmd>f...

weixin_34413103的博客 159

raw (R/G, B/G) 色度域从白点筛选到 mired 直方图的完整构建流程

raw 域用draw​δraw​筛出白点后,。,与 CIE uv 域流程逐步对应。

大熊 38

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux中限定值、 常用基本系统数据类型和文件I/O

1.获得特定系统实际支持的限定值: 1)编译时限制(头文件):/usr/include/limits.h #include 2)与文件或目录无关的限制 long sysconf(int name); 3)与文件或目录有关的限制 long fpathconf(int fd, int name); long pathconf(char *path, int name); 2.UNI

任我行的博客 1089

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

unix环境高级编程基础知识之第一篇

  陆陆续续看完了圣经第一章,熟悉了unix的整个编程流程,c语言的用处在这里得到伸张。   从unix的体系结构,原来操作系统包括内核及一些其他软件,我们常常误称为linux内核为操作系统,这俨然成为一种共识。基本熟悉了shell的介绍,主流的是bash(Bourne-again shell),unix的文件的基本操作,出错处理,用户ID,信号(感觉类似windows的消息),时间值,最后还有...

weixin_30622107的博客 60

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

UNIX环境高级编程读书笔记

主要记录关键知识点,方便日后查阅 第一章 UNIX基础知识 UNIX体系结构,书中是这样画的: 这篇文章认为这样画不合理https://blog.youkuaiyun.com/lyndon_li/article/details/116956043 应该这样,我也赞同 shell是特殊的一种应用程序 errno:在支持多线程的环境中,多个线程共享进程地址空间,每个线程都有属于它自己的局部errno以避免一个线程干扰另一个线程,定义为 extern int __errno_location(void) #define

zhangxinjieli3的专栏 335

UNIX环境高级编程教程

UNIX环境高级编程教程 去发现同类优质开源项目:https://gitcode.com/ UNIX环境高级编程.pdf是一款专为UNIX操作系统用户设计的编程教程。本教程全面、深入地讲解了UNIX环境下的高级编程知识,旨在帮助读者掌握UNIX环境下的编程技巧和方法。 教程简介 本教程内容丰富,涵盖了UNIX基础知识、UNIX标准化及实现、文件I/O、文件和目录、标准I/O库、系统数据文件和信息、...

gitblog_06793的博客 255

unix 环境高级编程阅读笔记1-5章节

Unix 环境高级编程读者:注意仅仅是记录自己阅读进度,坚持阅读,没有深度 源代码:http://www.libpix.org/apue/ 第二版http://www.apuebook.com/code3e.html 第三版第1章UNIX基础知识 文件和目录 2017年7月20日 系统调用和库函数 第2章 UNIX标准话及实现 最大文件描述符 sysconf 第3章 文件I/O 引言

田航语 373

linux/unix编程手册-1_5

title: linux/unix编程手册-1_5 date: 2018-05-01 11:53:07 categories: programming tags: tips linux/unix编程手册-2 基本概念 内核 内核职责 进程调度(哪些进程获得CPU的使用,每个进程使用多久) 内存管理(虚拟内存管理:进程之间,进程和内核之间相互隔离;只需将进程的一部分内容放在内存中,变相提高C...

weixin_34077371的博客 146

【UNIX网络编程】5种I/O模型

本文介绍了五种I/O模型的工作原理:阻塞I/O全程等待;非阻塞I/O通过轮询检查状态;I/O复用通过select等机制监控多个描述符;信号驱动I/O由内核主动通知数据就绪;异步I/O则由内核完成所有操作后通知结果。文章通过老王烧水的生动比喻,形象说明了各种模型的特点,指出阻塞I/O效率最低,非阻塞I/O消耗CPU资源,I/O复用可提高效率,而异步I/O性能最优。不同模型适用于不同场景,理解其差异有助于系统优化。

KuKudeZ的博客 2239

UNIX环境编程:文件I/O

★内容概述: 本章主要讲了文件I/O,即不带缓冲的I/O,然后介绍了不带缓冲I/O函数随后介绍了文件共享实现方式,主要是使用3种数据结构实现(进程表项,文件表项,v-node和i-node)。然后从文件共享提出了一个问题,就是多个进程同时操作文件可能产生的数据一致性问题,由此又介绍了两个原子操作(pread和pwrite)。最后介绍了常用的I/O控制函数。

_ 1174
上一篇: 转载Ubuntu18.04卡死问题解决,
下一篇: ubuntu 18.04 编译Android坑s
杨鑫校
博客等级 码龄11年 24粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值