Download presentation
Presentation is loading. Please wait.
1
[Unix Programming] Process Basic Young-Ju, Han Email: yjhan@imtl.skku.ac.kr yjhan@imtl.skku.ac.kr
2
2007 UNIX Programming 2 Contents Introduction main Function Process Termination Command-line Arguments Environment List Memory Layout of a C Program
3
2007 UNIX Programming 3 main Function (1) The prototype of the main function. int main(int argc, char *argv[]); You did make only main(), but there are some more code in a.out C start-up code : doing initializations for the process and call exit(main(argc, argv)); C start-up code Doing initialization ; exit( main(argc,argv)) ; main( int argc, char* argv[] )) { … return 0 ; } a.out
4
2007 UNIX Programming 4 main Function (2) How a C Program starts. You enter “a.out” on the shell prompt $ a.out Shell forks itself and duplicates itself The duplicated shell calls exec(“a.out”) The duplicated shell is replaced with “a.out” “a.out” runs Shell : $ a.out Shell fork a.out exec
5
2007 UNIX Programming 5 Process Termination (1) Process terminations Normal Return from main Calling exit Calling _exit Abnormal calling abort terminated by a signal main() { printf(“hello, world\n”); exit( 0 ); } int main( void ) { printf(“hello, world\n”); return 0 ; } main() { printf(“hello, world\n”); _exit( 0 ); }
6
2007 UNIX Programming 6 Process Termination (2) exit #include void exit(int status); C library function Perform certain cleanups and return to the kernel closing all open file descriptors calling of all exit handlers (clean-up actions) _exit #include void _exit(int status); System call Return to the kernel immediately
7
2007 UNIX Programming 7 Process Termination (3) Prototype of atexit() function ANSI C 에서 exit 에 의해 자동으로 call 되는 function 을 32 개까 지 등록할 수 있음 ( 즉, exit handlers) 등록한 역순으로 call 됨 등록한 횟수만큼 call 됨 #include int atexit( void (*func) (void)); returns: 0 if OK, nonzero on error
8
2007 UNIX Programming 8 Process Termination (4) Example of atexit() #inlcude #include static void my_exit1(void), my_exit2(void) ; int main( void ) { atexit( my_exit2 ) ; atexit( my_exit1 ) ; printf( "main is done\n" ) ; return 0 ; } static void my_exit1( void ) { printf( "first exist handler\n" ) ; } static void my_exit2( void ) { printf( "second exist handler\n" ) ; } $ a.out main is done first exit handler second exit handler $
9
2007 UNIX Programming 9 Process Termination (5) kernel exit function user functions main function C start-up routine exit handler standard I/O cleanup (via fclose)... _exit exec call return exit call return _exit user process
10
2007 UNIX Programming 10 Command-Line arguments The command-line arguments passed to the main function via two parameters int argc and char *argv[]. Example. int main(int argc, char *argv[]) { int i; printf("argc = %d\n", argc); for(i=0; i<argc; i++) printf("argv[%d] = %s\n", i, argv[i]); return 0; } $ a.out hello world argc = 3 argv[0] = a.out argv[1] = hello argv[2] = world argc 3 argv \0 a.out\0 hello\0 world\0
11
2007 UNIX Programming 11 Environment Lists(1) environment a collection of null-terminated strings represented a null-terminated array of character pointers name=value \ 0 int main(int argc, char *argv[], char *envp[]){ while(*envp) printf(“%s\n”, *envp++); return 0; } HOME=/usr/home/kmjsh PATH=:/bin:/usr:/usr/include SHELL=/bin/sh
12
2007 UNIX Programming 12 Environment Lists(2) A global variable extern char **environ Example POSIX.1 은 main 의 third argument 대신에 environ 사용을 권함 특정 environment variable 에 접근하기 위해서는 getenv, putenv 를 사용 HOME=/home/stevens\0 PATH=:/bin:/usr/bin\0 SHELL=/bin/sh\0 environ \0 USER=stevens\0 #include extern char **environ ; main() { int i ; for( i = 0 ; environ[i] ; i++ ) printf( "%s\n", environ[i] ) ; }
13
2007 UNIX Programming 13 Environment Lists(3) getenv To get environment lists putenv To set environment lists int main(){ printf(“PATH=%s\n”, getenv(“PATH”)); if ( putenv(“NEW=val”) != 0 ) exit(1); printf(“NEW=%s\n”, getenv(“NEW”)); return 0; } #include char * getenv(const char *name); int putenv(char* string); String format “NAME=VALUE\0” Ex) “PATH=:/bin:/usr:/usr/include” 0 :success Non-zero : fail (ENOMEM) Value pointer : success NULL : not present
14
2007 UNIX Programming 14 Environment Lists(4) #include int setenv(const char *name, const char* value, int rewrite); 0 : not changed Non-zero : changed 0 :success -1 : fail #include void unsetenv (const char *name); setenv name 이 존재하지 않으면 value 로 설정, 존재하고 rewrite 가 0 이 면 갱신하지 않고, 0 이 아니면 갱신 unsetenv name variable 를 삭제
15
2007 UNIX Programming 15 Memory Layout of a C Program (1) Memories 영역들 text: CPU 에 의해 수행되는 machine instructions data: initialized global and static variables. 예 ) int maxcount = 99; bss: uninitialized global and static variables. exec 에 의해 0 or null 로 초기화 예 ) long sum[1000]; stack: automatic (local) and temporary variables of each function. 프로그램 실행 중 할당된다. 함수의 처음에 할당되 고 끝나면 소멸된다. heap: dynamically allocated area. (malloc, calloc)
16
2007 UNIX Programming 16 stack heap Memory Layout of a C Program (2) low address High address Initialized to 0 by exec read from program file by exec Command-line arg & environ. Var. uninitialized data (bss) initialized data text $ size /usr/bin/cc /bin/sh text data bss dec hex filename 7205 284 428 7917 1eed /usr/bin/grep 87678 2778 11172 101628 18cfc /bin/sh
17
2007 UNIX Programming 17 Memory Layout of a C Program (3) func(char *str) { char buf[16]; …. strcpy(buf, str); …. } main(int argc, char *argv[]) { …. func(argv[1]) …. } buf[16] SFP RET argv[1] main 변수 SFP RET … Local variable Stack frame pointer Return address argument low address high address Stack structure
18
2007 UNIX Programming 18 Memory Layout of a C Program (4) 3 types of memory allocation functions malloc allocate a specific number of bytes of memory calloc allocate space for a specified number of objects of a specified size The space is initialized to all 0 bits realloc Change the size of a previously allocated area (increase, decrease) Prototypes. #include void *malloc(size_t size); void *calloc(size_t nobj, size_t size); void *realloc(void *ptr, size_t newsize); void free(void *ptr);// 할당된 메모리를 다시 시스템에 반환할때
19
2007 UNIX Programming 19 Memory Layout of a C Program (5) Global 변수 프로그램의 어디서나 접근 가능한 변수, Data 영역 또는 BSS 에 할당 Local 변수 Function 내부에서 정의된 변수 Function 내에서 선언된 Static 변수 Stack 이 아닌 Data 영역 또는 BSS 에 할당되고, Function 이 call 과 return 에 상관없이 항상 하나만이 존재 Function 밖에서 선언된 Static 변수 Data 영역 또는 BSS 에 할당되며, File 내에서는 접근 가능
20
2007 UNIX Programming 20 Memory Layout of a C Program (6) Look at this code: can you differentiate these? int g_i ; int gi_i = 100 ; main( int argc, char *argv[] ) { int l_i ; char *ptr = malloc( 100 ) ; } $ size a.out text data bss dec hex filename 28198 9368 500 38066 94b2 a.out Can you tell me which variable will be allocated into which area? How can I know the size of each area ?
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.