【经验总结】浅谈 bash I/O操作

I/O重定向 文件描述符 在我们开始学习重定向之前,我们先来了解一下文件描述符(fd:file descriptor) 一切皆文件,大家应该都听过这句话吧,linux的哲学思想。当我们对这些文件进行处理的时候,系统对会对每个打开的文件分配一个文件描述符。 文件描述符是一个数字。不同数字代表不同的含义,默认情况下,系统占用了3个,分别是0标准输入(stdin),1标准输出(stdout), 2标 阅读详情

 

浅谈 bash I/O操作

by tay


bash的I/O处理是非常重要的一块,这点是毋庸置疑的,它承载着所有的文件操作(读、写)、标准输出/输入流控制等,它使得bash与操作系统的联系更紧密,使脚本程序更加简练、高效、安全。

然而bash的I/O操作往往成了蒙蔽他人双眼的迷雾,这种神秘让很多bash脚本程序对其敬而远之,

的确,脚本程序的魅力之一在于“开发快速、浅显易懂”,高级的I/O使用势必会打破这一点,造成程序的可读性“差”

 

直观的认识

人总是最容易理解直观的东西,所以shell的设计者们这样做了

例子1:

[root@tay test]# echo ABC >txt

“这样字符串ABC就被输出到txt文件中了”,这样的说法很易懂,或者通俗的:“这样ABC就被送到txt中了”,因为 “>”很形象,同样的:

例子2:

[root@tay test]# sendmail -t <tmp.txt

“<”作为输入,这也很形象,还有:

例子3:

[root@tay test]# ps ax | grep resin

“|” 管道符,先不用看样子,听名字就能猜个差不多了

这些都是很常用的,而这直观的认识对于所有人都那样的容易理解,何乐而不为呢?

而对于一个深爱bash的人来说,这种嘲弄如何容忍?

 

Dirty work

bash dirty work !

可以理解为:“低效的(开发速度或运行速度)”、“丑陋的”或“幼稚的”的bash脚本程序

从很多地方能看出一个脚本是不是dirty work,比如bash的I/O操作

 

1、用“here document” 、“进程替换”或“文件描述符”技巧来避免无用的临时文件

可能是本人对linux操作系统的临时文件有过度的洁癖吧 ! 

如果那些临时文件没有用,就没有理由生成它,

除了低效(I/O读写频繁)、低可读性以外,它毫无意义

试想,一旦文件系统只读了,或文字大于100行,用临时文件更是不合适的

例如:

echo ... >tmp.txt

echo ... >>tmp.txt

cat txt >>tmp.txt

sendmail -t< tmp.txt

rm -f tmp.txt

再如:

awk ’{print $1,$2,$3}’ list.conf >tmp.txt

while read i j k;do

   ...

done <tmp.txt

rm -f tmp.txt

这些tmp.txt文件用完了还要删除,或用完了就无用了,为何要生成它?

第一个例子用here document来解决:

sendmail -t <<-Endmail

   ...

   ...

   `cat txt`

Endmail

因为用的是 “<<-”,所以里面的每行首是tab,不是空格,

这样看起来是不是更好看了呢?:) 更重要的是,将here document直接作为sendmail的stdin,免去了生成临时文件,更高效,也更干爽

第二个例子用“进程替换”来做:

while read i j k;do

   ...

done < <(awk ’{print $1,$2,$3}’ list.conf)

将stdin替换成一个进程,也避免了生成临时文件

BTW:

你可能会说用管道符:

awk ’{print $1,$2,$3}’ list.conf | while read i j k;do ... 

不是也行吗,免了临时文件?

但这样会新fork出两个subshell,

效率很低不说,很多变量更都成了subshell的私有变量,不易调用

第二个例子用“文件描述符”+ “进程替换”的另一种方法:

exec 6< <(awk ’{print $1,$2,$3}’ list.conf)

while read -u6 i j k;do

   ...

done

exec 6<&-

新建fd6,read命令从fd6中取到stdin,效率和原理上,和单单用“进程替换”是一样的

但是这样可以解决另一个问题 --- 文件描述符冲突

什么时候会冲突呢?

比如while read 结构中,遇到ssh等需要重新建立stdin的程序时,就会出问题了,

循环只执行一遍就会因为read的stdin被重置,read返回false,while就停止了

所以,当while read遇到ssh时,应该这样,

read不用stdin(fd0),而用fd6或其他的fd,来避免冲突:

exec 6< <(cmd1)

while read -u6 i;do

   ssh 127.0.0.1 "cmd2"

   ...

done

exec 6<&-

当然只是举个例子,可以直接用ssh的“-n”参数来关闭ssh的stdin来避免这种情况:

while read i;do

   ssh -n 127.0.0.1 "cmd"

   ...

done

2、用“code块(大括号)”或“文件描述符”来生成文件

当我们要生成多行文本文件的时候,比如生成日志等等,这样做是很糟的:

echo "aaa" >tmp.log

echo "bbb" >>tmp.log

echo "ccc" >>tmp.log

cat txt >>tmp.log

这样很多行的“>>”,很是无味儿 :(

多次I/O写操作、糟糕的可读性,没有理由不用下面这种方法,“code块”:

{

   echo "aaa"

   echo "bbb"

   echo "ccc"

   cat txt

} >tmp.log

这样多次的写操作就变成了一次,而且代码干爽

 

最后来看一个不是很常见的的I/O操作,来实现同样的功能,用“文件描述符”:

exec 6>&1

exec >&tmp.log

echo aaa

echo bbb

echo ccc

cat txt

exec 1>&6

exec 6>&-

其中,将tmp.log临时变成stdout,然后再恢复stdout,这种做法更像其他语言的“文件句柄”,可能更会被接受

本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.youkuaiyun.com/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)

Bash I/O 重定向 我们尝试将他重定向到文件 test,但是结果仍是输出 id: ethereum: no such user。<<-LimitString可以抑制输出时前边的tab(不是空格). 这可以增加一个脚本的可读性.# 这里可以看到错误输出 id: ethereum: no such user。测试实验结果成功了,将错误输出转到标准输出,然后写入文件。查看 test 文件,内容空。 阅读详情

相关推荐

掌握I/O重定向与Shell脚本中的字符串I/O操作

本文详细介绍了Linux环境下I/O重定向的各种方式及其应用场景,包括标准输出和输入的重定向、文件描述符的使用、here文档的处理,以及字符串I/O中echo和printf命令的深入解析。通过对章节内容的解读,我们能够更好地理解和利用Shell脚本进行高效的文件操作和信息输出。

weixin_30789053的博客 469

linux基础(五):bash、io与变量;数组;表达式;分支与循环

这里写目录标题一、bash二级目录三级目录 一、bash shell就是一个bash程序 -解释器,启动器 -解释器: 用户交互输入 文本文件输入 脚本本质: -#!/bin/bash -#!/usr/bin/python 读取方式: bash file -当前shell:source file. -新建子shell:/bin/bash file 或者 ./file.sh (需要chmod +x file.sh) . 命令行中的命令都可以放到一个文件中! 省的每次都得重新写大量的shel

m0_53077537的博客 373

FitzHugh-Nagumo 模型连续-MATLAB仿真

【代码】FitzHugh-Nagumo 模型连续-MATLAB仿真。

qq_43688618的博客 882

设置bash选项(set命令)

set:打开选项:set -o 选项,关闭选项目:set +o 选项 内置set命令选项 选项名 快捷开关 含义 allexport -a 从这个选项中被设置开始就自动标明要输出的新变量或修改过的变量,直至选项被复位 braceexpand -B 打开花括号扩展,它是一个默认设置 emacs 使用emacs内置编辑器进行命令行编辑,是一个默认设置 errexit -...

vswjm的专栏 548

【影像组学入门百问】1#---#3

理论上讲三大主流平台Windows, Linux和MacOS均可进行影像组学研究。根据笔者实际经验,如果内存不足可能导致软件罢工,其余显示、GPU等均非必要。显示:最小分辨率为1024×768(推荐为1280×1024或更好)。Slicer中的许多计算都是多线程的,并且将受益于多核,多CPU配置。计算机需要足够的内存和图形功能将原始数据和处理结果保存在其内存中。如涉及深度学习等方法的研究需根据实际需求配置电脑,无法一概而论。接口设备:推荐使用带滚轮的三键鼠标。内存:超过4GB(推荐8G以上)。

weixin_38594676的博客 1483

如何使用JMeter进行大模型的压力测试?

使用JMeter进行大模型的压力测试,核心是通过模拟高并发请求,测试大模型在极限负载下的性能表现(如响应时间、吞吐量、错误率、资源瓶颈等)。通过以上步骤,可系统性评估大模型在高压下的性能极限,为优化模型(如量化、蒸馏)、扩容硬件(增加GPU)或调整接口限流策略提供数据依据。)、请求方式(POST)、认证方式(API Key放在Header)、请求参数(作用:避免瞬间高压压垮系统,更精准找到瓶颈点。等)、响应格式(同步/流式)。需获取:API地址(如。通过CSV文件引入不同。

alankuo的专栏 787

bash中IO重定向功能和管道功能的模拟

“程序默认使用标准输入输出”,这是Unix哲学中的其中一条。 1 bash中的重定向模拟 用户登陆系统后,系统已经打开了终端,并在描述符表中使用三个描述符0,1,2来进行索引。由于Unix系统中描述符表是被子进程继承的,所以以后生成的任何进程都自动拥有了这三个描述符。其中的0用于索引标准输入设备,1用于索引标准输出设备,2则用于索引标准错误输出设备。 像C库中的printf()函数就是向描述

smstong的成长轨迹 2880

从论文到生产:iSLIP优先级匹配算法在SDN交换机中的20年演进史

本文回顾了iSLIP优先级匹配算法在SDN交换机中的20年演进历程,从斯坦福大学的原始论文到现代芯片实现。通过独特的指针滑动和迭代循环机制,iSLIP算法显著提升了交换机的吞吐量和公平性,解决了传统FIFO调度的队头阻塞问题。文章详细探讨了算法在硬件实现中的工程挑战、开源实践及未来AI时代的智能调度方向。

weixin_29230649的博客 331

[Bash基础] 0表示真,1表示假 + 解释

例子: touch item01.txt test -e item01.txt echo $? 输出:0 一种解释: (隐含前提:习惯上我们会更关注“0”或“非0”的划分) 在bash语言中,0, 1只表示返回状态码。 而作为状态码,我们希望“成功”是一种返回,“失败”则有多种返回,对应多种出错信息。 而0只有一种类型;如果返回非零数字,则有1~255,可以表示各种错误。一些常见的错误码如下: Table1.ReservedExit Codes 状态码 描述 0 ...

mathemagics的博客 1497

振动分析-46-设备振动监测和故障诊断能力提升需要理解和掌握的知识体系

提升振动分析能力对于确保机械设备的高效运行和预防故障至关重要。

qq_20466211的博客 664

YOLOv13添加WDBB模块,map提升5.34!!,召回率提升6.55,准确率提升3.23

本文提出了一种基于YOLOv13改进的目标检测模型,通过引入WDBB模块显著提升了检测性能。实验结果表明,添加WDBB模块后,mAP提升11.34,召回率提升14.55,准确率提升3.23。文章详细介绍了模型移植方法,包括创建新的yaml配置文件、修改tasks.py和__init__.py文件,以及实现rep_block.py中的核心转换函数。改进后的模型通过深度卷积、通道注意力等模块优化了特征提取能力,同时保持了轻量化的特点。该工作为YOLO系列模型的性能提升提供了新的思路和技术实现。

FJN110的博客 2623

bash的IO重定向及管道

程序:指令+数据     读入数据 input     输出数据 output          打开的文件都有一个fd:file descripter(文件描述符)          标准输入设备:键盘 0     标准输出设备:显示器 1     标准错误输出设备:显示器 2          I/O重定向:改变标准位置即为重定向          输出重定向:    【只重定向正确输出】 ...

Mr.O~的博客 459

六、数据资产平台功能架构

该架构图展示了一个功能完善的数据资产平台,它涵盖了数据资产管理的各个方面,从数据采集、模型设计、编目到使用和分析。通过该平台,企业可以更好地管理数据资产,提高数据利用效率,并为业务决策提供有力支持。

moton2017的博客 1625

I/O操作

数据从存储设备(如硬盘、SSD、U盘等)传输到内存中的过程。示例程序路径:/home/user/projects/a.out。

Made In SQL 929

BMS控制板硬件设计核心要点与工程避坑指南

电池管理系统(BMS)硬件设计是保障锂电安全与寿命的关键环节,其本质是模拟前端精度、数字控制可靠性、电源完整性及电磁兼容性四大要素的系统协同。理解AFE芯片(如BQ76920)的物理层约束、MCU与专用监控IC的异构分工逻辑,是构建高鲁棒BMS的基础;而晶振布局、I²C总线匹配、MOSFET体二极管方向、开尔文采样等细节,直接决定量产良率与EMC合规性。在电动工具、储能系统、两轮电动车等中低功耗BMS应用中,成本敏感型方案常采用STM32F0+AFE架构,此时电源滤波电容选型、复位电路ESR控制、TVS/齐

weixin_30591519的博客 259

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Linux—— bash 的I/O重定向及管理

bash 的I/O重定向及管理 程序: 命令+ 数据 读取数据:Input 输出数据:Output 标准输入:keyborad :0 标准输出:(默认输出)monitor:1 标准错误输出:monitor,2 I/O重定向:改变标准位置 输出重定向: COMMAND > NEW_POS,COMMAND >> NEW_POS > : 覆盖重定向,目标文件的原有内容...

Cloud_DQY的博客 264

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【PostgreSQL系列】PostgreSQL 容器磁盘 I/O 监控与优化

本文探讨了在容器化环境中监控和优化PostgreSQL数据库I/O性能的方法。首先,文章指出了在BusyBox等轻量级容器环境中使用iostat等工具的限制,并提出了替代方案。接着,详细介绍了基础监控方案,包括如何使用BusyBox版的iostat监控磁盘I/O,并解析了关键指标及其阈值。随后,文章探讨了高级监控方案,如安装完整的sysstat工具集或通过宿主机进行监控。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深度学习工具包 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")

linux查看.o文件函数,linux 标准I/O函数详解

1、I/O操作是系统的基础。I/O 表示的input【输入】和output【输出】 。I/O操作是系统实现的基础。如果没有I/O操作,所以有的系统文件将无法存储,更谈不上处理与分析,系统运行的结果也不为用户所见。2、系统IO与标准IO的区别I/O 分为标准IO 和系统IO。标准io称为stdio,系统IO又称为文件IO。系统IO是内核提供给用户处理IO操作的接口。例如:标准C是不能处理输入输出问...

weixin_42350914的博客 831

Okio简化处理I/O操作原理

Okio库是一个由square公司开发的,它补充了java.io和java.nio的不足,以便能够更加方便,快速的访问、存储和处理你的数据。而OkHttp的底层也使用该库作为支持。而在开发中,使用该库可以大大给你带来方便。 目前,Okio的最新版本是1.6.0,gradle的引用如下 compile 'com.squareup.okio:okio:1.6.0' 123 Okio中有

精益求精 1697

linux bash 重定向,Linux bash中I/O重定向及管道

我们知道,在Linux中一切皆文件。这就意味着,任何一个设备在系统中都有一个文件与之对应。因此我们就可以通过文件来访问设备。对于用户来讲,访问文件就是通过文件名来进行的,用户看到就是一个文件名,但对于内核来说,看到的只能是数字,这个数字就叫做文件描述符,内核就是通过利用文件描述符fd(file descriptor)来访问文件。打开现存文件或者新建文件时,内核会返回一个文件描述符。读写文件也需要使...

weixin_35056641的博客 249

Bash I/O重定向

使用Bash编程时,重定向是最常用到的技术之一。标准输出重定向还比较直观一个‘>'就搞定了,但是多个输出重定向时就有点乱了,而且输入重定向理解不顺,使用不自然。理解kernel如何管理文件描述符后,使用起来就很自然了,原理也比较简单!

xuriwuyun的专栏 1040

监控文件描述符的六种方式(进程监控、select、poll、非阻塞轮询I/O、异步I/O、线程监控)

监控文件描述的六种方式方法1:用进程来监控文件描述符方法2 :使用select来监视文件描述符select函数代码示例使用poll来监视文件描述符poll函数代码示例 阻塞型读操作会使调用程序一直阻塞到输入可用为止。当进程要从多个源端接收输人时这样的阻塞会引起一些问题,因为进程无法知道下一个输入是由哪个文件描述符产生的。因为服务器需要从多个客户机接收输入,所以多文件描述符问题通常都出现在客户机-服务器结构的编程中。下面列出了POSIX中六种常见的监视多个文件描述符的输入的方法。 1.每个文件描述符都由一个

weixin_47826078的博客 4195

Linux运维第5天:Linux下bash配置及I/O重定向和grep文本查找

计算器:bc         scale=n;设置精度          手动添加用户(hive):基本组hive,附加组will     1.修改/etc/passwd文件     2.修改/etc/shadow文件     3.修改/etc/group文件     4.修改/etc/gshadow文件     5.cp -r /etc/skel/ /home/hive/  

will835559313的专栏 942

Bash-Oneliner磁盘I/O:性能测试与瓶颈分析

你是否曾遭遇过服务器明明配置高端却频繁卡顿?是否在数据处理时因磁盘读写缓慢而束手无策?磁盘I/O(Input/Output,输入/输出)往往是系统性能的隐形瓶颈。本文将带你掌握Bash-Oneliner项目中15+磁盘I/O诊断工具,通过30+实战命令和6个真实案例,从测试到调优一步到位。读完本文,你将获得: - 5类核心性能指标的监测方法 - 10+性能测试单行命令模板 - 3步定位磁盘瓶颈的...

gitblog_00662的博客 851
上一篇: 【经验总结】脚本如何支持可变参数,参数可以不按顺序输入
下一篇: 【经验总结】linux命令巧用asc码
wireless_tech
博客等级 码龄16年 23粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值