LINUX.ORG.RU

Копирование binary через pipe

 , ,


0

2

file /tmp/input.tcl

#! /usr/bin/env tclsh
fconfigure stdin -buffering none
set file [open "/tmp/output.txt" wb]
set data 0
while { $data >= 0 } {
  set data [read stdin]
  puts -nonewline $file $data
}
close $file

Делаю

 cat /boot/amd-uc.img | /tmp/input.tcl

и получаю

$ md5sum /boot/amd-uc.img /tmp/output.txt
78b07920739329805bc25c8e67b73e2a  /boot/amd-uc.img
4c67e69c409d2685fa9d2355c8253335  /tmp/output.txt

Хотя по смыслу вроде похожи

$ file /boot/amd-uc.img /tmp/output.txt
/boot/amd-uc.img: ASCII cpio archive (SVR4 with no CRC)
/tmp/output.txt:  ASCII cpio archive (SVR4 with no CRC)

В какую сторону посмотреть?

сравни по байтам и найди разницу? По любому newline затесался где-нибудь

phoenix ★★★★
()

https://www.tcl.tk/man/tcl8.4/TclCmd/puts.htm:

Newline characters in the output are translated by puts to platform-specific end-of-line sequences according to the current value of the -translation option for the channel... See the fconfigure manual entry for a discussion on ways in which fconfigure will alter output.


-fconfigure stdin -buffering none
+fconfigure stdin -buffering none -translation binary

sanwashere ★★
()
Ответ на: комментарий от macumazan

И проверка $data >= 0 неправильная. $data у тебя не число содержит, а бинарные данные. Там что-то вроде ![eof stdin] должно быть.

TeopeTuK ★★★★★
()

Странный у тебя код. Ты зачем-то в txt записываешь бинарный файл, обрезая финальный перевод строки. Зачем? Попробуй python. Он хорош минимум тем, что в любом дистрибутиве по дефолту (я сейчас не про арч и тп конструкторы)

rtxtxtrx
()
Ответ на: комментарий от rtxtxtrx

Осталось понять, чем питон поможет с кодом на тикле.

TeopeTuK ★★★★★
()
Ответ на: комментарий от rtxtxtrx

Ты зачем-то в txt записываешь бинарный файл, обрезая финальный перевод строки. Зачем? Попробуй python.

Ну, не логично.

macumazan ★★
() автор топика
Ответ на: комментарий от macumazan

Значит успевает все прочитать за один раз. Но цикл я бы все равно оставил на случай очень длинного входящего потока.

TeopeTuK ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.