Date: Wed, 9 Jul 2008 22:08:32 +0200 From: Michael Knudsen <none@e--molioner.dk.lh.bsd-dk.dk> To: bsd-dk@bsd-dk.dk Subject: Re: freebsd: unix socket programmering
Quoting Michael Rasmussen (mir@datanom.net):
[..]
> > Mit umiddelbare bud er, at han har aendret noget andet. (: Der er
> > ikke forskel.
> >
> Næ, det skyldes at struct sockaddr_un har følgende definition:
> #define UNIX_PATH_MAX 108
>
> struct sockaddr_un {
> sa_family_t sun_family; /* AF_UNIX */
> char sun_path[UNIX_PATH_MAX]; /* pathname */
> };
>
> sizeof (struct sockaddr_un) vil altid returnere 109, da sun_path er et
> array med plads til 108 bytes. Den faktiske længde af sun_path er ikke
> en konstant, da længden afhænger af den givne path - ikke brugte
> pladser i array vil være 0-paddet. Derfor vil strlen(sun_path) variere,
> mens sizeof(sun_path) vil være en konstant.
Hvad for noget? sun_path har allokeret (100 * sizeof(char)) == 100
bytes, ligegyldigt hvor meget af det du saa bruger. sizeof() evalueres
paa compile-time. Den ved intet om, hvor meget du bruger paa runtime.
Det er ikke strlen().
Se nu her:
Script started on Wed Jul 9 22:03:05 2008
luggage$ cat /tmp/sizeof.c
#include <stdio.h>
#define ARRAYSZ 100
struct bras {
int hurra;
char ohno[ARRAYSZ];
};
int
main(int argc, char **argv)
{
struct bras a;
printf("sz a %zd sz bras %zd\n", sizeof(a), sizeof(struct
bras));
return 0;
}
luggage$ make sizeof
`sizeof' is up to date.
luggage$ ./sizeof
sz a 104 sz bras 104
luggage$ ^D
Script done on Wed Jul 9 22:03:17 2008
Mvh. Michael.
-- ``Light travels faster than sound. This is why some people appear bright until you hear them speak.''
This archive was generated by hypermail 2b30 : Thu 31 Jul 2008 - 23:00:01 CEST