Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

U dilemi sam

[es] :: C/C++ programiranje :: U dilemi sam

[ Pregleda: 2767 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon U dilemi sam15.05.2003. u 21:51 - pre 226 meseci
Code:

struct hostent *
gethostname (char *host)
{
  struct hostent hostbuf, *hp;
  size_t hstbuflen;
  char *tmphstbuf;
  int res;
  int herr;

  hstbuflen = 1024;
  /* Allocate buffer, remember to free it to avoid memory leakage.  */
  tmphstbuf = malloc (hstbuflen);

  while ((res = gethostbyname_r (host, &hostbuf, tmphstbuf, hstbuflen,
                                 &hp, &herr)) == ERANGE)
    {
      /* Enlarge the buffer.  */
      hstbuflen *= 2;
      tmphstbuf = realloc (tmphstbuf, hstbuflen);
    }
  /*  Check for errors.  */
  if (res || hp == NULL)
    return NULL;
  return hp;
}


ovaj sors sam nasao na www.gnu.org.

Buni me hostbuf, to je lokalna struktura, koja ne vazi izvan funkcije, a koristi se kao drugi parametar funkcije gethostbyname_r.
Cemu uopste sluzi onda ta struktura?

Ako se tu upisuju podaci, onda su ti podaci nedostupni izvan funkcije?
Mada, koliko ja znam, podaci se upisuju u dinamicki alociranoj memoriji na koju ukazuje tmphstbuf.

Pa, cemu onda sluzi ona hostbuf struktura?

Dakle, da rezimiram, ova fja gore ili
1) vraca hostent preko onog buffera (onda mi uopste nije jasna uloga one lokalne hostent strukture)
ili
2) uopste ne vraca hostent jer on vazi samo u funkciji (tj. neki idiot sa gnu.org je pisao ovaj example?)
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.dial.InfoSky.Net

Sajt: localhost


+4 Profil

icon Re: U dilemi sam15.05.2003. u 22:01 - pre 226 meseci
samo kratko po pitanju lokalne promenjive hostbuf (za ostalo ne znam).


to što je nešto lokalna promenjiva ne znači da nije dostupna van funkcije, već da je njeno postojanje (tj alociranje) vremenski ograničeno na vreme izvršavanja funkcije.

drugim rečima, kada ova funkcija treba da se izvrši, na stack-u se alocira prostor za sve njene lokalne promenjive, i on je alociran dok se ne izađe iz funkcije, tj dok se stack pointer ne vrati na mesto gde je bio pre pozivanja ove funkcije.


naravno, pozivi drugih funkcija iz ove pomeraju stack pointer dalje na gore (ili kako već gledaš ;) pa znači ne utiču na alokaciju te memorije.. zato je moguća i rekurzija i sve ostalo...
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Re: U dilemi sam15.05.2003. u 22:20 - pre 226 meseci
nisam siguran da si me razumeo

ova fja gore se zove gethostname.
zamisli ovo:
Code:

struct hostent *hp;
hp = gethostname ("peca");

hp ukazuje na dinamicki alociranu strukturu.
Sad ja pitam, koju svrhu ima lokalna struktura 'hostbuf' u onoj mojoj funkciji ?
Ona ne postoji posle izvrsavanja te funkcije, pa se pitam da li 'hn' uopste pokazuje na citavu (ne obrisanu) strukturu?

Ako 'hostbuf' nema veze sa 'hn' - koja je onda svrha 'hostbuf' strukture?
Ako 'hostbuf' IMA veze sa 'hn' - da li struktura na koju ukazuje 'hn' uopste postoji vise (posto 'hostbuf' vise ne postoji).

Logicno je po meni da 'hostbuf' IMA veze sa 'hn', jer koja je onda svrha 'nostbuf' strukture?
Ako 'hostbuf' ima veze sa 'hn', a 'hostbuf' prestaje da vazi - na sta onda 'hp' ukazuje???

Ako gledas sors funkcije - izgleda kao da 'hostbuf' postoji samo kao neki temp buffer koji nama uopste ne treba.
Da li je to zaista tako?
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: U dilemi sam15.05.2003. u 22:32 - pre 226 meseci
Prvo malena korekcija - hostbuf je promenljiva tipa struct hostent. Pomenuta struktura je deklarisana u netdb.h (što bi već trebalo da znaš, s obzirom da se već baviš time čime se baviš) kao:
Code:

/* Description of data base entry for a single host.  */
struct hostent
{
  char *h_name;        /* Official name of host.  */
  char **h_aliases;    /* Alias list.  */
  int h_addrtype;       /* Host address type.  */
  int h_length;        /* Length of address.  */
  char **h_addr_list;       /* List of addresses from name server.  */
#define h_addr  h_addr_list[0]  /* Address, for backward compatibility.  */
};

Šta je šta ovde pitaće neko (početnik)... h_name sadrži adresu gde počinje string u kome je ime samog hosta; h_aliases sadrži niz pokazivača na alias imena (ako me sećanje ne vara ti u svom /etc/hosts imaš par ovih alijasa za 127.0.0.1 ;) ; h_addrtype je sigurno nešto što bi trebalo da znaš (AF_INET ili AF_INET6)...; h_length sadrži dužinu adrese (4 ili 16); dok je (siguran sam!:) h_addr_list tebi najzanimljiviji pokazivač. On adresira niz pokazivača na IPv4 ili IPv6 adrese.
NAJKRAĆE MOGUĆE REČENO, ta funkcija čiji sors si dao je zapravo reentrantni gethostbyname() sa još nekim sitnim proverama.
Što se promenljive hostbuf tiče, ona je tu jer programer nije hteo da se muči da alocira memoriju za promenljivu struct hostent tipa... Znači nema nikakvog skrivenog značenja u svemu tome, čovek je znao da mu ta promenljiva treba kada bude listao kasnije sve i na početku je deklarisao.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Re: U dilemi sam16.05.2003. u 00:04 - pre 226 meseci
Jasna je meni struktura.

Citat:

Što se promenljive hostbuf tiče, ona je tu jer programer nije hteo da se muči da alocira memoriju za promenljivu struct hostent tipa... Znači nema nikakvog skrivenog značenja u svemu tome, čovek je znao da mu ta promenljiva treba kada bude listao kasnije sve i na početku je deklarisao.


Sada me i ti bunis.
Kada ce on to da lista 'hostbuf', ako ta struktura ne postoji van funkcije, a u funkciji je ne lista?
On sa 'hostbuf' vise nista ne radi u funkciji, koju ulogu onda ona ima?

Koristi je samo kao drugi parametar getostbyname_r funkcije.
Taj drugi parametar je struct hostent *ret, i man kaze lepo:
The result of the call is now stored in the struct with address ret.

Dakle, tamo ide rezultat funkcije.
On taj rezultat nigde ne koristi, on propada kada se funkcija zavrsi?
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Re: U dilemi sam16.05.2003. u 16:43 - pre 226 meseci
Da skratim muke i sebi i vama koji pokusavate da mi pomognete, batalio sam funkciju gethostbyname_r() i presao sam na getaddrinfo() koja je mnogo mocnija i savremenija...
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: U dilemi sam16.05.2003. u 17:01 - pre 226 meseci
Peco, ja ne znam gde sam ja to napisao da ce da "lista hostbuf" ... covek je deklarisao promenljivu jer mu kasnije treba za gethostname_r() ...

Drugo, kazes "getaddrinfo() koja je mnogo mocnija i savremenija" ... zasto? Zato jer ne razumes neki sors koji si skinuo sa NET-a? - Ne smem ni da ti kazem sta mislim o svemu ovome...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Re: U dilemi sam16.05.2003. u 20:32 - pre 226 meseci
Citat:

Peco, ja ne znam gde sam ja to napisao da ce da "lista hostbuf" ... covek je deklarisao promenljivu jer mu kasnije treba za gethostname_r() ...

I jel si apsolutno siguran da 'hostbuf' vise nije potreban?

izvod iz man-a:
----------
The result of the call is now stored in the struct with address ret. After the call, *result will be NULL on error or point to the result on success.
---------
ret=hostbuf
result='hn'

Dakle, rezultat ide u 'hostbuf', a 'hn' pokazuje na 'hostbuf' (rezultat).
'hn' se zatim prosledjuje dalje, a 'hostbuf' vise ne postoji...

Ajde, ja sam glup, objasni mi ovo :)
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Re: U dilemi sam16.05.2003. u 21:23 - pre 226 meseci
Code:

#include <stdio.h>
#include <netdb.h>
#include <string.h>

int main( int argc, char **argv )
{
    struct hostent hostbuf, *hn;
    char buf[1024];
    int lerrno, rval;

    if (argc != 2) return 1;

    rval = gethostbyname_r( argv[1], &hostbuf, buf, sizeof(buf), &hn, &lerrno );
    if (rval != 0) return 1;
    
    printf ("mem address of hostbuf = \t %u\n", (long)(&hostbuf));
    printf ("mem address of *hn = \t\t %u\n", (long)(&(*hn)));
    
    return 0;
}


Ovo daje sledece:
Code:

$ ./test3 peca
mem address of hostbuf =         3221223552
mem address of *hn =             3221223552


Iz cega sledi da je:
*hn = hostbuf.

Ako hostbuf ne postoji izvan funkcije, hoce li 'hn' da pokazuje na citavu strukturu ?
Nece :(

Citat:

(tj. neki idiot sa gnu.org je pisao ovaj example?)


Na zalost je to tako :(

'hostbuf' treba da bude deklarisan izvan funkcije, i da se funkciji prosledjuje pointer na njega - onda bi example bio OK!
Dakle, dilema je resena - funkcija iz gornjeg primera (sa gnu.org) je losa.


[Ovu poruku je menjao Predrag Damnjanovic dana 16.05.2003. u 22:49 GMT]
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: U dilemi sam16.05.2003. u 21:32 - pre 226 meseci
Citat:
Kada ce on to da lista 'hostbuf', ako ta struktura ne postoji van funkcije, a u funkciji je ne lista?


Ja ne razumem sta hoces da kazes sa ovim, i ko "lista hostbuf" (totalno nebulozno receno)? struct hostbuf "listati"... sta hoces da kazes sa tim?
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: U dilemi sam16.05.2003. u 21:34 - pre 226 meseci
Citat:
I jel si apsolutno siguran da 'hostbuf' vise nije potreban?


Citiraj tacno gde sam to rekao. I takodje preciziraj to "vise", sta hoces tacno time da kazes...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: U dilemi sam16.05.2003. u 21:37 - pre 226 meseci
Citat:
Predrag Damnjanovic:
'hostbuf' treba da bude deklarisan izvan funkcije, i da se funkciji prosledjuje pointer na njega - onda bi example bio OK!


A sta ta funkcija vraca? Pokazivac na vrednost kog tipa?

Druga stvar je ovo Peco, ja tvoje poruke smatram zezanjem jednim velikim... Prvo imas frku, a onda pametujes i ISPRAVLJAS KOD KOJI NA POCETKU NISI NI RAZUMEO!

Ja MOLIM Gojka da mi ispuni moju zelju u vezi ignorisanja korisnika na ES-u, jer cu neke definitivno da stavim na ignore listu.

[Ovu poruku je menjao leka dana 16.05.2003. u 21:40 GMT]
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: U dilemi sam16.05.2003. u 21:41 - pre 226 meseci
Peco, nisam JA rekao da "lista hostbuf", vec si TI rekao! - Od mene ne ocekuj vise odgovore ovde, jer sve ovo smatram veoma neozbiljnim.

P.S. to sto si citirao NE odnosi se na strukturu, vec pogledaj malo sta to LISTA (u petlji)...

[Ovu poruku je menjao leka dana 16.05.2003. u 21:48 GMT]
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: U dilemi sam16.05.2003. u 21:49 - pre 226 meseci
Podseticu te da si temu diskusije postavio TI, i nije bila da li je funkcija totalno ispravna, vec je pitanje bila ta famozna promenljiva, i sta ce ona tu...
Citat:

Buni me hostbuf, to je lokalna struktura, koja ne vazi izvan funkcije, a koristi se kao drugi parametar funkcije gethostbyname_r.
Cemu uopste sluzi onda ta struktura?

Cak si i ovde pogresio, jer struktura nije hostbuf, hostbuf je promenljiva u toj funkciji... Jos smesnije je sto je nazivas lokalnom strukturom ...

[Ovu poruku je menjao leka dana 16.05.2003. u 21:51 GMT]
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: U dilemi sam16.05.2003. u 21:52 - pre 226 meseci
Ne, vec ti menjas temu u sred diskusije. Tema uopste nije bila ispravnost funkcije, vec tvoj ZBUNJ u vezi promenljive.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: U dilemi sam17.05.2003. u 00:44 - pre 226 meseci
Citat:
Ne znam zasto ovu diskusiju vidis kao bilo kakvo suprotstavljanje tvom misljenju?


Predraže, čitava ova diskusija, polemika, svađa (nazovi je kako želiš), je zbog toga što ti "trčiš pred rudu" i sve vreme moje reči preokrećeš kako ti volja i povrh svega skrećeš sa teme u svojoj brzopletosti.
Pogledaj gore i dole navedene citate na primer - da li sam ja ikada izjavio tako nešto? - Nisam. Ti UMIŠLJAŠ.

Drugi primer:
Citat:
Ja te niti prozivam niti te teram da ucestvujes u diskusiji.

Gde sam ja to izjavio?

Da li shvataš šta želim da ti ovim kažem? - Smatram da si dovoljno pametan da sam dođeš do zaključka...

Jedna molba - pogledaj svoja dva teksta - prvi i zadnji, uporedi ih i videćeš da jedan sa drugim nemaju nikakve blage veze, dakle Peco SKOČIO SI SA JEDNE TEME NA TOTALNO TREĆU (možda čak i desetu).

Na kraju još da naglasim - ja iz koda ne mogu da znam da li radi ili ne radi, dao si nam samo funkciju! Funkcija možda radi nešto korisno - ja nisam gledao da li je funkcija korektna i da zadovoljava neke tvoje lične potrebe (koje su samo u tvojoj glavi) - ja sam gledao/analizirao kod koji si dao i fokusirao se na problem koji si izneo, a to je, podsećam, ona tupava varijabla koja je tipa struct hostent!

Toliko od mene u ovoj diskusiji, jer sam za nju potrošio poslednji bit interesovanja.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.dial.InfoSky.Net

Sajt: www.mycity.rs


+1 Profil

icon Re: U dilemi sam17.05.2003. u 12:37 - pre 226 meseci
Sinoc sam malo popio, tako da evo sad vidim da sam kriv, pogresio sam kad sam se upustio u raspravu oko nebitne stvari.
Evo ja ti se sa moje strane izvinjavam Leko.

Stvarno se bez veze raspravljamo, izvini sto sam ti rekao da ucestvujes u diskusiji a ne govoris o iospravnosti funkcije, stvarno nije na meni da govorim o tvom ucescu u diskusiji, jer svako ima pravo da komentarise kako mu je volja, ja trebam samo da se zahvalim svakom na ucescu...

Izvini jos jednom i hvala na ucescu.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 802
*.pexim.co.yu



+62 Profil

icon Re: U dilemi sam19.05.2003. u 18:30 - pre 225 meseci
Elem...

'Leko legendo', 'Dragi Tata'... i ne znam koji jos moderatori, supermoderatori i ostali titulisani likovi ovde postojite - poslusajte par reci od mene.

DA SAM JA ILI BILO KO DRUGI OVAKO 'POLEMISAO' (VIDI GORE), MISLIM DA BI MI IZVESNO VREME BIO ZABRANJEN BILO KAKAV POST NA BILO KOJU GRUPU OVDE. U NAJMANJU RUKU BIO BIH OPOMENUT I SANKCIONISAN (PONEKA PORUKA BI OTISLA U KOS). I MISLIM, TO JE OK, OVO JE FORUM, NA FORUMU POSTOJE PRAVILA I ONA TREBA DA SE POSTUJU.

OSIM...U PAR IZUZETAKA OVDE VIDJENIH. MODERATORI SVIH VRSTA OVDE PRISUTNI, STE VI SKOLSKI DRUGOVI ILI TAKO NESTO? KONKRETNIJE, DA LI PRAVILA NE VAZE ZA MODERATORE? AKO JE TAKO, BAR NAMA OSTALIMA NE ZAMAZUJTE OCI NEKOM DEMOKRATIJOM OVDE; OSTAVITE NAS U UVERENJU DA JE OVO VASA PRCIJA (KAO STO I JESTE, UOSTALOM) I DA VAM SE MOZE STA VAM SE 'OCE.

Toliko

Rajko

P.S. Sad sam pokojni...
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: U dilemi sam19.05.2003. u 19:41 - pre 225 meseci
'Rajko Legendo',
ko te naljutio toliko? Jesi li i ti popio neku kao Predrag pa se iz....... nad nama ovde?

Prvo, ne treba da vices :) Ono, mogu ja da citam i mala slova.
Drugo, ... da li si procitao svoju poruku posle nekog vremena? Nadam se da jesi. I ja sam pizdeo zbog mnogo cega ovde, ali nigde nisam zapenio kao ti ovde. Sta smo/sam ti skrivili/io?
Posto si zapravo uzeo u obzir Nemanju i mene (mada prvo mene) ima logike u pretpostavci da sam ja nesto lose uradio...

Ako tako nesto postoji, iznesi javno i civilizovano (i demokratski uz to :) sta je to lose sto uradih...

P.S. ni sa kim na ES forumu nisam skolski drug, stariji sam od (maltene) vecine... niti jednog od moderatora znam licno sto mozda neces verovati (ako znam nekoga licno onda mu se izvinjavam :)...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

[es] :: C/C++ programiranje :: U dilemi sam

[ Pregleda: 2767 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.