// Environment Variables, demonstration program #include #include extern char **environ; /* find the NULL pointer that indicates the end of the array v */ static int pos_null(char *v[]) { if (v == NULL) return -1; int i = 0; while (*v != NULL) { v++; i++; } return i; } int main(int argc, char *argv[], char *envp[]) { int n; printf("initial conditions\n"); n = pos_null(environ); printf(" %08p &environ, %d elements\n", &environ, n); printf(" %08p &environ[0]\n", &environ[0]); printf(" %08p &environ[%d]\n", &environ[n], n); printf(" %08p &environ[0][0]\n", &environ[0][0]); printf("\n"); printf(" %08p &argc\n", &argc); printf("\n"); n = pos_null(argv); printf(" %08p &argv, %d elements\n", &argv, n); printf(" %08p &argv[0]\n", &argv[0]); printf(" %08p &argv[%d]\n", &argv[n], n); printf(" %08p &argv[0][0]\n", &argv[0][0]); printf("\n"); n = pos_null(envp); printf(" %08p &envp, %d elements\n", &envp, n); printf(" %08p &envp[0]\n", &envp[0]); printf(" %08p &envp[%d]\n", &envp[n], n); printf(" %08p &envp[0][0]\n", &envp[0][0]); printf("\n"); printf("after putenv(\"A=B\");\n"); putenv("A=B"); n = pos_null(environ); printf(" %08p &environ, %d elements\n", &environ, n); printf(" %08p &environ[0]\n", &environ[0]); printf(" %08p &environ[%d]\n", &environ[n], n); printf(" %08p &environ[0][0]\n", &environ[0][0]); printf("\n"); printf(" %08p &argc\n", &argc); printf("\n"); n = pos_null(argv); printf(" %08p &argv, %d elements\n", &argv, n); printf(" %08p &argv[0]\n", &argv[0]); printf(" %08p &argv[%d]\n", &argv[n], n); printf(" %08p &argv[0][0]\n", &argv[0][0]); printf("\n"); n = pos_null(envp); printf(" %08p &envp, %d elements\n", &envp, n); printf(" %08p &envp[0]\n", &envp[0]); printf(" %08p &envp[%d]\n", &envp[n], n); printf(" %08p &envp[0][0]\n", &envp[0][0]); printf("\n"); printf("after setenv(\"C\", \"D\", 1);\n"); setenv("C", "D", 1); n = pos_null(environ); printf(" %08p &environ, %d elements\n", &environ, n); printf(" %08p &environ[0]\n", &environ[0]); printf(" %08p &environ[%d]\n", &environ[n], n); printf(" %08p &environ[0][0]\n", &environ[0][0]); printf("\n"); printf(" %08p &argc\n", &argc); printf("\n"); n = pos_null(argv); printf(" %08p &argv, %d elements\n", &argv, n); printf(" %08p &argv[0]\n", &argv[0]); printf(" %08p &argv[%d]\n", &argv[n], n); printf(" %08p &argv[0][0]\n", &argv[0][0]); printf("\n"); n = pos_null(envp); printf(" %08p &envp, %d elements\n", &envp, n); printf(" %08p &envp[0]\n", &envp[0]); printf(" %08p &envp[%d]\n", &envp[n], n); printf(" %08p &envp[0][0]\n", &envp[0][0]); printf("\n"); printf("after unsetenv(\"A\");\n"); unsetenv("A"); n = pos_null(environ); printf(" %08p &environ, %d elements\n", &environ, n); printf(" %08p &environ[0]\n", &environ[0]); printf(" %08p &environ[%d]\n", &environ[n], n); printf(" %08p &environ[0][0]\n", &environ[0][0]); printf("\n"); printf(" %08p &argc\n", &argc); printf("\n"); n = pos_null(argv); printf(" %08p &argv, %d elements\n", &argv, n); printf(" %08p &argv[0]\n", &argv[0]); printf(" %08p &argv[%d]\n", &argv[n], n); printf(" %08p &argv[0][0]\n", &argv[0][0]); printf("\n"); n = pos_null(envp); printf(" %08p &envp, %d elements\n", &envp, n); printf(" %08p &envp[0]\n", &envp[0]); printf(" %08p &envp[%d]\n", &envp[n], n); printf(" %08p &envp[0][0]\n", &envp[0][0]); printf("\n"); return 0; }