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