stdbuf命令linux
-
stdbuf命令是Linux系统中的一条命令,用于控制标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)的缓冲模式。缓冲模式是指当数据被写入或读取时,操作系统如何处理数据的方法。
在默认情况下,stdin和stderr通常是行缓冲的,而stdout通常是块缓冲的。这意味着当数据被写入stdin或stderr时,它们不会立即被发送到相应的目标,而是先暂存在缓冲区中;而当数据被写入stdout时,它们会被存储在缓冲区中,直到缓冲区被填满或者遇到换行符或者文件结束符才会被发送出去。
stdbuf命令的作用就是修改这种默认的缓冲模式,以满足特定的需求。它可以设置stdin、stdout和stderr的缓冲模式为无缓冲、行缓冲或块缓冲。
stdbuf命令的用法如下:
stdbuf -i <缓冲模式> -o <缓冲模式> -e <缓冲模式> <命令>
其中,-i选项用于设置stdin的缓冲模式,-o选项用于设置stdout的缓冲模式,-e选项用于设置stderr的缓冲模式。缓冲模式可以是以下三种之一:
1. 无缓冲(unbuffered):数据立即被发送或接收,不进行缓冲。可以使用”0″或”u”表示。
2. 行缓冲(line-buffered):当遇到换行符时,数据被发送或接收。可以使用”1″或”l”表示。
3. 块缓冲(block-buffered):当缓冲区填满或者读取到文件结束符时,数据被发送或接收。可以使用”大小”或”b大小”表示,其中大小可以是具体的数值(表示缓冲区大小,以字节为单位),也可以是单位为KB、MB、GB等的数值。
例如,以下命令将标准输入和标准输出的缓冲模式都设置为无缓冲,然后执行了一个命令:
stdbuf -i0 -o0 command
这样,数据将立即被发送到标准输入和标准输出。
总之,stdbuf命令是一个用于控制标准输入、标准输出和标准错误输出缓冲模式的实用工具。它可以根据需要来修改缓冲模式,以满足特定的需求。
2年前 -
stdbuf命令是Linux系统中的一个工具命令,它用于设置标准输入、输出或错误流的缓冲区大小。
1. 设置标准输入缓冲区大小:
使用stdbuf命令可以设置标准输入的缓冲区大小,这对于一些需要及时处理用户输入的程序非常有用。通过指定-I选项可以设置缓冲区大小。例如,要将缓冲区大小设置为1行,可以使用以下命令:
“`
stdbuf -i0 -o0 -e0 command
“`2. 设置标准输出缓冲区大小:
使用stdbuf命令可以设置标准输出的缓冲区大小,这对于一些需要立即输出结果的程序非常有用。通过指定-O选项可以设置缓冲区大小。例如,要将缓冲区大小设置为1行,可以使用以下命令:
“`
stdbuf -i0 -o0 -e0 command
“`3. 设置标准错误缓冲区大小:
使用stdbuf命令可以设置标准错误的缓冲区大小,这对于一些需要即时输出错误信息的程序非常有用。通过指定-E选项可以设置缓冲区大小。例如,要将缓冲区大小设置为1行,可以使用以下命令:
“`
stdbuf -i0 -o0 -e0 command
“`4. 控制输出的刷新方式:
stdbuf命令还可以控制输出的刷新方式,即决定何时将输出写入到终端。如果使用stdbuf命令设置为行缓冲模式,则每写一行数据就会将其输出到终端。如果设置为块缓冲模式,则会等待缓冲区被填满或程序结束才会输出。5. 使用示例:
下面是一个使用stdbuf命令的示例,通过该命令将g++编译C++程序时的标准错误输出实时显示在终端上:
“`bash
g++ main.cpp 2>&1 | stdbuf -o0 tr ‘\n’ ‘\r’ | stdbuf -oL sed -e ‘$!N; /^\(.*\)\n\1$/!P; D’ | stdbuf -oL sed -e ‘s#.*\r\(.*\)#\1#’ | stdbuf -oL tr ‘\r’ ‘\n’
“`在上述示例中,将g++编译时的错误信息通过管道传递给stdbuf命令,然后使用sed和tr等命令进行数据的处理和格式化,最终将结果输出到终端上。这样可以实时查看编译过程中的错误信息。
2年前 -
stdbuf是一个用于调整输入输出缓冲区大小的Linux命令。它可以在命令行中用来改变缓冲模式,从而控制数据的输入输出方式。在Linux系统中,I/O操作通常是使用缓冲区进行的,而stdbuf命令提供了一种修改缓冲区设置的方法。
stdbuf命令的语法如下:
“`
stdbuf OPTION… COMMAND
“`其中,OPTION是用于指定缓冲区大小的参数,可以是以下选项之一:
– `-i`或`–input=MODE`:指定标准输入的缓冲模式。
– `-o`或`–output=MODE`:指定标准输出的缓冲模式。
– `-e`或`–error=MODE`:指定标准错误输出的缓冲模式。MODE可以是以下选项之一:
– `L`或`–line`:按行进行缓冲。在遇到换行符时输出。
– `N`或`–unbuffered`:不进行缓冲,直接输出。
– `B`或`–block`:按块进行缓冲。在缓冲区填满后输出。COMMAND是要执行的命令。
下面我们来通过一些示例来演示stdbuf命令的使用。
## 示例1:禁用输出缓冲
要禁用输出缓冲,可以使用stdbuf命令的`-o`选项,将MODE设置为`0`,示例如下:
“`
stdbuf -o0 COMMAND
“`
这将强制COMMAND命令的标准输出直接写入终端,而不是先缓冲。## 示例2:按行进行输入缓冲
要将输入缓冲设置为按行模式,可以使用stdbuf命令的`-i`选项设置MODE为`L`,示例如下:
“`
stdbuf -iL COMMAND
“`
这将使得COMMAND命令只在输入行结束时才进行处理。## 示例3:按块进行输出缓冲
要将输出缓冲设置为按块模式,可以使用stdbuf命令的`-o`选项设置MODE为`B`,示例如下:
“`
stdbuf -oB COMMAND
“`
这将使得COMMAND命令在缓冲区填满后才输出。## 示例4:组合使用多个选项
stdbuf命令的多个选项可以组合使用,来同时修改输入和输出缓冲。示例如下:
“`
stdbuf -iL -o0 COMMAND
“`
这将使得COMMAND命令按照行缓冲输入并禁用输出缓冲。以上就是stdbuf命令的基本使用方法和示例。通过控制缓冲区的设置,stdbuf命令可以帮助我们灵活控制数据的输入输出方式,适应不同的需求。
2年前