Jednoduchy program v C (was: grep -b nefunguje)
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Středa Březen 7 21:10:22 CET 2001
On Tue, 6 Mar 2001, Jaroslav Lukesh wrote:
> Jeste bych mel dotaz ohledne
> printf("%lu\n", block);
> potreboval bych tam v podstate dostat dd, je to takhle spravne?
> printf("%lu\n", "dd if=/dev/hdd2 of=/mnt/d1/solved_", block, " bs=1024
> count=128 skip=", block);
Jak napsat ten printf spravne, to uz nekdo ukazoval, ale mnohem
flexibilnejsi je nechat tam vypisovani cisel, jak to bylo puvodne, a ty
kecy kolem k tomu pribalit dodatecne:
hledaci_program ... | while read block; do
dd if=... of=..._$block ... skip=$block
done
nebo trochu rafinovaneji
hledaci_program ... | \
sed -e 's/\(.*\)/dd if... of=..._\1 ... skip=\1/' | \
sh
Ze stejneho duvodu by bylo zadouci, aby se hledany text, velikost bloku
a offset zadavaly jako parametry a nebyly nadratovane primo v programu. :)
Krome toho jeste jedno upozorneni: byvaly verze fileutils, kde skip=
u dd delalo to, ze dd uvedeny pocet bloku skutecne *precetlo* i v pripade,
ze vstupni soubor byl "seekable". V takovem pripade byste se dockal
neprijemneho prekvapeni.
> Je to tak spravne? Co "%lu\n" presne dela? Novy radek?
Vypisuje jeden unsigned long (%lu) a konec radku (\n).
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux