fork : 프로세스 생성
- 부모 프로세스 : fork를 호출한 프로세스. 리턴값이 0이 아님
- 자식 프로세스 : fork에 의해 생성된 프로세스. 리턴값이 0
exec : 프로그램 실행
- 새로운 프로세스로 변경. -> 새로운 프로그램의 내용이 실행.
- ID는 변하지 않음.
명령행 인자
- argc : 인자들의 개수
- argv[0] : 실행될 프로그램 이름
- 인자들은 공백 문자에 의해 구분.
예외) unix계열에선 "good morning"을 하나의 인자로 처리한다.
환경변수
- 부모 프로세스에서 자식 프로세스로 전달됨.
- 문자열의 형식은 "환경변수이름=값"
- 문자열의 배열에 대한 포인터
- 리스트의 마지막(을 구분해주는 표식)은 NULL포인터
환경변수 관련 변수
- int main(int argc, char *argv[], char *envp[]);
- extern char **environ;
환경변수 조작함수
#include<stdlib.h>
char *getenv(const char *name);
- 기능 : "name=value"형식의 문자열을 찾아 value를 리턴.
- 리턴 : 성공시 환경 변수 값에 대한 포인터, 실패시 NULL
int putenv(const char *str);
- 기능
"name=value"형식의 str문자열을 환경변수로 등록한다.
"name"만 적으면 name이 존재할 때 해당하는 환경변수를 삭제한다.
- 리턴 : 성공시 0, 실패시 0이 아닌 값.
- 함수 내부적인 구현은 str포인터를 (따로 복사하지 않고) 그대로 사용한다.
=> global변수 혹은 malloc으로 할당하여 사용하여야 한다.
=> 포인터를 사용하기 때문에 함수 호출 후 값을 바꾸면 환경변수 값도 바꾼다.
공유라이브러리
- 프로그램에 라이브러리 루틴들을 포함하지 않음.
- 필요시 라이브러리의 주소를 참조하여 실행.
- 실행시 오버헤드 발생.
동적라이브러리
#include<stdlib.h>
void* malloc(size_t size); // size 바이트 메모리 할당.
void* calloc(size_t nobj, size_t size); // 원소의 크기는 size이고 배열 개수는 nobj로 메모리 할당.
void* realloc(void* ptr, size_t newsize); // 이미 할당 받은 영역의 크기를 조정.
리턴 : 성공시 할당받은 메모리에 대한 포인터, 실패시 NULL
void free(void* ptr); // 메모리 해제. 메모리 누수를 막기 위해 꼭 필요.
#include<alloca.h>
void* alloca(size_t size);
기능
- 현재 함수의 스택 프레임에서 메모리 할당.
- free함수 호출 없이 자동으로 메모리 해제.
'컴퓨터 공부 > Advanced UNIX System Programming' 카테고리의 다른 글
[5월 1일 2교시] 프로세스 제어 1 (0) | 2009.05.01 |
---|---|
[5월 1일 1교시] 메모리 관리 (0) | 2009.05.01 |
[4월 30일 2교시] 프로그램 개발 환경2 + 프로세스1 (0) | 2009.04.30 |
[4월 30일 1교시] 프로그램 개발 환경1 (0) | 2009.04.30 |
[4월 29일 3교시] 라이브러리 파일 관련 함수 3 (0) | 2009.04.29 |