linux写入二进制文件内容,linux – 从管道读取数据并写入标准输出,中间延迟.必须处理二进制文件...
我現在已經嘗試了大約一個小時來找到解決這個問題的優雅方案.我的目標基本上是編寫帶寬控制管道命令,我可以在各種情況下重復使用(不僅僅是網絡傳輸,我知道scp -l 1234).我想做的是:
>延遲X秒.
>從管道讀取Y量(或者如果沒有足夠的話,小于Y).
>將讀取數據寫入標準輸出.
哪里:
> X可以是1..n.
> Y可以是1個字節,直到某個高值.
我的問題是:
>它必須支持Bash無法很好處理的二進制數據.
我采取或至少考慮過的道路:
>使用while read數據結構,它會過濾您使用的編碼中的所有白色字符.
>使用dd bs = 1 count = 1并循環. dd似乎沒有不同的退出代碼,當有和沒有東西時.這使得更難知道何時停止循環.如果我將標準錯誤重定向到臨時文件,讀取它以檢查某些內容是否已轉移(如在stderr上打印的統計信息中)并重復,則此方法應該有效.但是我懷疑如果在大量數據上使用它會非常慢,如果有可能我想跳過創建任何臨時文件.
關于如何使用Bash盡可能干凈地解決這個問題的任何想法或建議?
解決方法:
它不是很優雅,但您可以使用一些重定向技巧來捕獲由dd復制的字節數,然后將其用作while循環的退出條件:
while [ -z "$byte_copied" ] || [ "$byte_copied" -ne 0 ]; do
sleep $X;
byte_copied=$(dd bs=$Y count=1 2>&1 >&4 | awk '$2 == "byte"{print $1}');
done 4>&1
但是,如果您的意圖是限制傳輸吞吐量,我建議您使用光伏.
標簽:bash,linux
來源: https://codeday.me/bug/20190827/1742693.html
總結
以上是生活随笔為你收集整理的linux写入二进制文件内容,linux – 从管道读取数据并写入标准输出,中间延迟.必须处理二进制文件...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 现在微信支付怎么变服务了
- 下一篇: 卜加一笔变成什么字 卜加一笔变成啥字