#include #include #include #include #include #include #include int main(void){ pthread_attr_t a; int result = 0; void *stackaddr = NULL; size_t stacksize = 0; int err; pid_t ret; ret = fork(); if( ret != 0 ){ wait(NULL); printf("In parent\n"); } else if ( ret == -1 ) { printf("Error forking.\n"); exit(1); } else { printf("In child\n"); } err = pthread_attr_init (&a); if (err){ error(0, err, "pthread_attr_init failed"); exit(1); } err = pthread_getattr_np (pthread_self (), &a); if (err){ error (0, err, "pthread_getattr_np failed"); exit(1); } err = pthread_attr_getstack (&a, &stackaddr, &stacksize); printf("&a=0x%x, stackaddr=0x%x, stacksize=0x%x\n", (unsigned int)(&a),(unsigned int)stackaddr,stacksize); if (err){ error (0, err, "pthread_attr_getstack failed"); result = 1; } else if ((void *) &a < stackaddr || (void *) &a >= stackaddr + stacksize){ error (0, 0, "pthread_attr_getstack returned range does not cover main's stack"); result = 1; } else printf ("initial thread stack %p-%p (0x%zx)\n", stackaddr, stackaddr + stacksize, stacksize); exit(0); }