시스템 프로그래밍
System call
- - 운영체제가 제공하는 서비스
- - 응용 프로그램은 정해진 방식에 따라서비스를 호출
- - Linux는 300여개의 시스템 호출을 제공
- - i386아키텍처의 경우 eax 레지스터에 시스템 호출 번호를 저장하고 int 0x80을 호출
- - 기타 매개 변수는 ebx,ecx,edx,esi,edi에 저장
- - 매개 변수가 5개보다 많으면, 마지막 레지스터는 매개 변수가 저장된 메모리 블록을 가리킴
CPU안 레지스터에 시스템 호출 블록을 넣는다.(원하는 호출블록을 다 집어넣음) , "인터럽트" 형태로 운영체제에게 부탁하고 돌아오는 것.
레지스터 5개에 사용자가 바라는 작업과 augment를 준다.
C compiler
- Linux 는 gcc(Gnu Compiler Collection)를 사용
C library
- 유닉스 응용을 구성하는 핵심 라이브러리
- Linux는 GNU libc(glibc)를 사용
- 표준 C library, 시스템 호출 랩, 스레드 지원 등을 제공
printf함수는 원래 C 언어에는 없는 것 .
표준 C libaray에 있는 함수일 뿐, libaray 함수는 선배 프로그래머들이 만들어 놓은 것임. 라이브러리에 있는 함수를 쓰는게 좋음.
Standard C Library
Linux 응용을 구성하는 핵심 라이브러리
- - C 언어 프로그램 작성 시에 유용한 기능을 제공하는 라이브러리 함수, C 컴파일러가 제공
- - Linux는 GNU libc(glibc)를 사용
- - 표준 C library, 시스템 호출 랩퍼, 스레드 지원 등을 제공
- - ANSI C의 경우, 라이브러리 함수를 표준화
Standard C library 사용의 장단점
- 장점
- 개발 기간의 단축
- 프로그램의 호환성과 낮은 유지보수 비용
-단점
- 실행시간에 의존적(time-critical)인 프로그램에서는 부적합
- 커널 접근이 많은 경우에는 부적합
ex) Memcopy : for loop을 돌면서 copy 하는 것이 아니라 CPU의 copy 명령어가 있음, 루프를 돌지 않음 기계어 하나가 copy.
굉장히 좋은 명령어들을 사용하기 때문에 우리가 작성하는 것보다 훨씬 효율적, 있다면 무조건 쓰는게 좋음 .
Standard C library의 종류
- 표준 입출력 함수
- 표준 라이브러리 함수
- 표준 수학 함수
- 표준 문자열 처리 함수
- 표준 바이트 스트림 처리 함수
- 표준 메모리 관리 함수
- 표준 시간 관련 함수
- 사용자 관리 함수
- 그룹 관리 함수
GNU C library in Linux System
- GNU C compiler 를 위한 표준 C 라이브러리
- glibc package
- 헤더파일 : /usr/include
- 라이브러리 아카이브 : /usr/lib/libc.o, /usr/lib/libc.so
표준 입출력 함수( Standard Input Ouput functions )
스트림 파일
- 바이트 스트림 형태로 구성된 파일
- 바이트 단위 또는 바이트 블록 단위로 입출력이 가능
- 파일입출력포인터 : 스트림 파일의 입출력 위치를 표시
표준 입출력 함수
- 스트림 파일을 접근하기 위해 제공하는 함수
- 헤드파일 : stdio.h
- FILE 자료형 사용
- 스트림 파일을 참조하기 위해 사용
- 스트림 파일을 열면 생성
- 스트림 파일을 닫으면 소멸
- 종류
- fopen / fclose / fcloseall / freopen
- scanf / fscanf / sscanf
- printf / fprintf / sprintf
- getc / gets / fgets
- putc/ puts / fputs
- fread / fwrite
- fseek / ftell / feof
- ferror / clearerr
- fineo / fdopen
표준 라이브러리 함수( Standard Library functions)
- 스트림 처리와 관계없는 일반적인 라이브러리 함수
- 주로 데이터 변환, 난수 발생, 쉘 환경변수 접근, 프로그램 실행제어, 셀 명령어 실행 등과 같은 기능을 지원
- 헤더 파일 : stdlib.h
- 쉘 명령어 실행 함수 : system()
- sub-shell을 실행하여 그 셀로 하여금 전달된 명령어를 실행하도록 한다.
-자료 변환 함수
- atoi(), atof(), atol()
- strod(), strtol(), strtoul()
- 문자열 데이터를 수치 데이터로 변환
-난수 생성 함수
- srand(), rand()
- 사용자로부터 seed 값을 얻어 임의적으로 난수를 발생시켜 반환
- 프로그램 종료 함수
- exit(), atexit(), abort()
- 프로그램을 종료할 때에 사용하는 함수
- 환경 변수 관련 함수
- getenv(), setenv()
- 셀 환경 변수를 설정하거나 접근 할 수 있는 함수
- putenv() 함수는 ANSI C 에서 지원하지 않음
-명령어 라인 인수 접근 함수
- getopt()
- 명렁어 라인 인수를 접근하는 함수
표준 수학 함수(Math functions)
일반적으로 널리 사용하는 수학 함수를 구현한 프로그램 함수
헤더파일 : math.h
종류
- 삼각함수 : sin(x), cos(x), tan(x)
- 역삼각함수 : asin(x), acos(x), atan(x), atan(y,x)
- 쌍곡선함수 : sinh(x), cosh(x), tanh(x)
- 지수/로그함수 : exp(x), log(x), log10(x), pow(x,y)
- 기타함수 : fabs(x), sqrt(x), ceil(x), floor(x), fmod(x,y)
표준 문자열 처리 함수(String funtions)
문자열 데이터를 다루기 위하여 제공되는 함수
거의 표준화된 함수가 제공되고 있음
- strlen()
- strcmp(), strncmp()
- strcat(), strncat()
- strcpy(), strncnpy()
- strchr(), strrchar(), strstr()
- strpbrk()
- strspn(), strcspn(), strtok()
- strerror()
- 표준 바이트 스트림 처리 함수(Byte stream functions)
- 표준 메모리 관리 함수(Memory management functions)
- 표준 시간 관련 함수(Time functions)
- 분기 함수(Branch functions)