根据我对缓冲区的了解:缓冲区是临时存储的数据。
例如:假设您想要实现一个algorithm来确定是语音还是噪声。 你将如何使用声音数据的恒定stream量来做到这一点? 这将是非常困难的。 因此,通过将其存储到数组中,您可以对此数据执行分析。
这组数据被称为缓冲区。
阻止到给定主机或IP的传出TCP连接?
如何在Linux内核中使用bio请求来读取扇区
在Linux的铿锵块?
Linux:写入被分成512K块
更改Windows中的块日记(NTFS)
stty -F /dev/ttyUSB0 ispeed 4800 && awk -F"," '/SUF/ {print $3,$4,$5,$6,$10,$11,substr($2,1,2),".",3,5,2)}' < /dev/ttyUSB0
如果我将这个命令的输出写入一个文件,我将无法写入它,因为输出可能是块缓冲,并且当我终止上述命令的输出时,将只产生一个空文本文件( CTRL + C) 。
这是我的意思是块缓冲。
可用的三种缓冲types是无缓冲的,块
缓冲和行缓冲。 当输出stream没有缓冲时,一旦写入,信息就会出现在目标文件或terminal上。 当它被块caching时,很多字符被保存起来并写成块; 当它是行缓冲的字符被保存起来,直到输出换行符或从连接到terminal设备(通常为stdin)的任何stream读取input。 函数fflush(3)可以用来强制阻止提前。 (见fclose(3)。)通常所有的文件都是块缓冲的。 当第一个I / O操作发生在一个文件上,malloc(3)被调用时,还有一个缓冲区
被获得。 如果一个stream指向一个terminal(正常情况下是stdout),它是行缓冲的。 标准错误streamstderr默认情况下始终是无缓冲的。
现在执行这个命令,
stty -F /dev/ttyUSB0 ispeed 4800 && awk -F",2)}' < /dev/ttyUSB0 > outputfile.txt
将会生成一个空文件,因为当我终止进程时缓冲块可能还没有完成,并且由于我不知道块缓冲区的大小,所以没有办法等待块完成。
为了将这个命令的输出写入一个文件中,我必须在awk使用fflush() ,这会成功地将输出写入到文本文件中,我已经成功完成了。
这里是:
stty -F /dev/ttyUSB0 ispeed 4800 && awk -F"," '/GGA/ {print "Latitude:",$3,"Longitude:","Altitude:","Time:",substr($2+50000,2); fflush(stdout) }' < /dev/ttyUSB0 | head -n 2 > GPS_data.txt
但我的问题是:
有什么办法可以声明缓冲区的大小,这样我就可以知道什么时候在生成缓冲区了,这样就省去了用fflush() ?
要么
无论如何改变缓冲区types从块缓冲到无缓冲或行缓冲吗?
根据音量/容量阻止USB
Linux内核中的页面交换
cpu如何从磁盘读取?
生产者消费者在块设备驱动程序中的实现?
如何在linux中连续磁盘块中存储文件
您可以使用stdbuf来运行修改了缓冲区大小的命令。
例如, stdbuf -o 100 awk ...将以100字节的标准输出缓冲区运行awk 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。