Apache a sendfile

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Sobota Červen 2 11:08:45 CEST 2007


On Sat, 2 Jun 2007, Dalibor Straka wrote:

> On Fri, Jun 01, 2007 at 10:00:31PM +0200, Pavel Kankovsky wrote:
> > On Fri, 1 Jun 2007, Dalibor Straka wrote:
> > 
> > > 		wr = write(fhost,buf, sizeof (buf));
> > > 		printf("Write: %d KiB, (w is %d)\n", sizeof (int)*(counter+=wr), wr);
> > > [...] dosel write k hodnote "Write: 475136 Byte".
> > 
> > Určitě to byl tento program?! A proč je tam to násobení sizeof(int)?
> > 
> K dispozici je cely zdrojovy text na
> dada.panelnet.cz/download/blockwrite.c

No jo, v tom programu na webu je
  printf("Write: %d Byte, (w is %d)\n", sizeof (int)*(counter+=wr), wr);
tedy je tam "Byte" místo "KiB".

> buffer jsem definoval jako
> int buf[4*256];
> proto sizeof (int) * counter. Byl to vytvor za 5 minut, priste
> napisu char buf[1024];

Aha, chtěl jste říct int buf[256] místo char[1024], ne?

A to souvisí s násobením výsledku jak? write() vrací počet zapsaných bajtů
(tedy pokud neskončí s chybou), nikoli počet zapsaných položek pole (on
nemá ani tušení, jaké to bylo původně pole). Pokud to vynásobím
sizeof(int), tak to má jaký smysl kromě toho, že to bude (na "běžné
architektuře") vypisovat 4x větší číslo, než má být správný výsledek?

Mimochodem, pokud těch údajných 475136 bajtů vydělíme 4, pak dostaneme
118784, což už vypadá poměrně realisticky.

--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