Czy zawartość tablic **environ i *env[] może się różnić? Dlaczego?

Odpowiedz Nowy wątek
2011-10-08 21:41
0

Tak jak w temacie. Poszukuję odpowiedzi, albo wskazówek dotyczących pytania:

Czy zawartość tablic *environ i env[] może się różnić? Dlaczego?


Pozostało 580 znaków

2011-10-08 21:55
0

Pytanie zasadnicze: co to za tablice?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-10-08 21:57
0

Dokładnie co to za tablice, już pomijając fakt, że **environ nie jest tablicą, a wskaźnikiem do wskaźnika na jakiś tam typ


Pozostało 580 znaków

2011-10-08 22:25
0

Tablica to prawie to samo co wskaźnik, tzn obojętnie czy zadeklaruję int tablica[10] czy int *tablica, to tablica wskazuje na adres pierwszego elementu. Być może *environ i env[] wskazują na ten sam obszar pamięci i są w identyczny sposób używane.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Prawie robi różnicę ;) Wszystko zależy na co to environ pokazuje. - byku_guzio 2011-10-08 22:40
Różnicy między deklaracjami parametrów int* xxx, a int xxx[] jest tylko stylistyczna, tak samo jak między tab[1] a 1[tab], czy *(tab+1) - Zjarek 2011-10-08 23:03

Pozostało 580 znaków

2011-10-08 23:02

Rozumiem że o to chodzi:

Historically, most UNIX systems have provided a third argument to the main function that is the address of the environment list:
int main(int argc, char argv[], char envp[]);
Because ISO C specifies that the main function be written with two arguments, and because this third argument provides no benefit over the global variable environ, POSIX.1 specifies that environ should be used instead of the (possible) third argument

(źródło: Stevens - Advanced Programming In The UNIX Environment 2e (2005))

Obie tablice różnić się nie powinny, ale jeśli zmodyfikujemy zmienne po włączeniu programu? Możliwe że wtedy environ będzie miał wartości poprawne a envp[] niekoniecznie (ale to tylko takie moje dywagacje)


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
Pomijając bezsensowność takich modyfikacji to nie wydaje mi się, żeby te same dane przy uruchomieniu programu kopiowane były w 2 różne miejsca w pamięci. - Zjarek 2011-10-08 23:07

Pozostało 580 znaków

2011-10-09 11:54
0

Przekonałeś mnie, że warto zainwestować w Stevens'a i jego publikacje. + dla Shalom

PS: environ to tablica przechowująca zmienne systemowe z jakimi program został uruchomiony.
char *environ[] jest to trzeci paramter funkcji main (tak, są 3 nie w).


edytowany 1x, ostatnio: razor91pl, 2011-10-09 11:55

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0