Linux System Programming Lecture #1 – 표준 C 라이브러리 함수
표준 C 라이브러리 함수 (1) 개요 C 언어 프로그램 작성 시에 유용한 기능을 제공하는 라이브러리 함수 ANSI C의 경우, 라이브러리 함수를 표준화 장점: 개발 기간의 단축 프로그램의 호환성과 낮은 유지보수 비용 단점: 실행시간에 의존적(time-critical)인 프로그램에서는 부적합 커널 접근이 많은 경우에는 부적합 Linux System Programming
표준 C 라이브러리 함수 (2) 종류 표준 입출력 함수 표준 라이브러리 함수 표준 수학 함수 표준 문자열 처리 함수 표준 바이트 스트림 처리 함수 표준 메모리 관리 함수 표준 시간 관련 함수 사용자 관리 함수 그룹 관리 함수 Linux System Programming
표준 C 라이브러리 함수 (3) GNU C library in Linux System GNU C Cimpiler를 위한 표준 C 라이브러리 glibc package 헤드 파일: /usr/include 라이브러리 아카이브: /usr/lib/libc.o, /usr/lib/libc.so Linux System Programming
표준 입출력 함수 (1) 스트림 파일 표준 입출력 함수 바이트 스트림 형태로 구성된 파일 바이트 단위 또는 바이트 블록 단위로 입출력이 가능 파일입출력포인터 : 스트림 파일의 입출력 위치를 표시 표준 입출력 함수 스트림 파일을 접근하기 위해 제공하는 함수 헤드파일: stdio.h ‘FILE’ 자료형 사용 스트림 파일을 참조하기 위해 사용 스트림 파일을 열면 생성 스트림 파일을 닫으면 소멸 Linux System Programming
표준 입출력 함수 (2) 표준 입출력 함수 (계속) 종류 fopen / fclose / fcloseall / freopen scanf / fscanf / sscanf printf / fprintf / sprintf getc / gets / fgets putc / puts / fputs fread / fwrite fseek / ftell / feof ferror / clearerr fineno / fdopen Linux System Programming
표준 입출력 함수 (3) 표준 입출력 함수 사용 예 표준 입출력 함수를 이용하여 파일(텍스트/이진)을 복사하는 프로그램 예 #1 : 일반 스트림 파일 입출력 함수를 사용 예 #2 : 표준 입출력 파일에 입출력 함수를 사용 Linux System Programming
표준 라이브러리 함수 (1) 표준 라이브러리 함수 스트림 처리와 관계없는 일반적인 라이브러리 함수 주로, 데이터 변환, 난수 발생, 쉘 환경변수 접근, 프로그램 실행제어, 셀 명령어 실행 등과 같은 기능을 지원 헤드 파일: stdlib.h Linux System Programming
표준 라이브러리 함수 (2) 쉘 명령어 실행 함수: system() 자료 변환 함수 sub-shell을 실행하여 그 셀로 하여금 전달된 명령어를 실행하도록 한다. 예제 1-4 : mini-shell 프로그램 자료 변환 함수 atoi(), atof(), atol() strtod(), strtol(), strtoul() 문자열 데이터를 수치 데이터로 변환 예제 1-5 : atol() 함수의 구현 Linux System Programming
표준 라이브러리 함수 (3) 난수 생성 함수 프로그램 종료 함수 srand(), rand() 사용자로 부터 seed 값을 얻어 임의적으로 난수를 발생시켜 반환 예제 1-6 : 유일한 난수를 반환하는 함수 구현 프로그램 종료 함수 exit(), atexit(), abort() 프로그램을 종료할 때에 사용하는 함수 Linux System Programming
표준 라이브러리 함수 (4) 환경 변수 관련 함수 명령어 라인 인수 접근 함수 getenv(), setenv() 셀 환경 변수를 설정하거나 접근할 수 있는 함수 putenv() 함수는 ANSI C에서 지원하지 않음 예제 1-7 : 환경 변수 접근 예 명령어 라인 인수 접근 함수 getopt() 리눅스 형식의 명령어 라인 인수를 접근하는 함수 예제 1-16 : 명령어 라인 인수 접근 예 Linux System Programming
표준 수학 함수 표준 수학 함수 일반적으로 널리 사용하는 수학 함수를 구현한 프로그램 함수 헤드 파일: math.h 종류: 삼각함수: sin(x), cos(x), tan(x) 역삼각함수: asin(x), acos(x), atan(x), atan2(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) Linux System Programming
표준 문자열 처리 함수 (1) 표준 문자열 처리 함수 문자열 데이터를 다루기 위하여 제공되는 함수 거의 표준화된 함수가 제공되고 있음 종류: strlen(), strcmp(), strncmp() strcat(), strncat() strcpy(), strncpy() strchr(), strrchar(), strstr() strpbrk() strspn(), strcspn(), strtok() strerror() Linux System Programming
표준 문자열 처리 함수 (2) 표준 문자열 처리 함수 사용 예 문자열의 토큰 분리 함수 : strtok() Linux System Programming
표준 바이트 스트림 처리 함수 (1) 표준 바이트 스트림 처리 함수 바이트 스트림을 다루기 위한 함수 스트림의 내용이 문자가 아님 점을 제외하면 문자열 처리 함수와 매우 유사 주로 구조체형 변수를 초기화, 비교, 복사할 때에 사용 헤드 파일: memory.h 종류: memset(), memcmp(), memcpy(), memccpy(), memchr() Linux System Programming
표준 바이트 스트림 처리 함수 (2) 표준 바이트 스트림 처리 함수 사용 예 구조체형 변수의 초기화, 비교, 복사 bzero(), bcmp(), bcopy() 구현 문자열 처리 함수의 구현 Linux System Programming
표준 메모리 관리 함수 (1) 표준 메모리 관리 함수 동적 메모리 할당과 회수, 재할당을 수행하는 함수 헤드 파일: malloc.h 종류: malloc() / calloc() free() realloc() realloc() 함수 사용 malloc()/calloc() 함수에 의해 할당된 동적 메모리 크기를 조절 프로세스의 실행 과정 중에 크기가 변할 수 있는 동적 배열 관리에 매우 유용 Linux System Programming
표준 메모리 관리 함수 (2) 표준 메모리 관리 함수 C++ 언어의 new/delete 연산자와 유사 예제 1-13 : realloc() 함수의 사용 예 Linux System Programming
표준 시간 관련 함수 (1) 표준 시간 관련 함수 시스템 클럭(clock)을 질의하기 위한 함수 프로세스의 CPU 사용량 또는 지역 및 세계 표준시간 정보를 얻을 수 있음 헤드 파일: time.h 종류: Data type: type_t, struct tm time() / mktime() ctime() / localtime() / gmtime() / asctime() clock() Linux System Programming
표준 시간 관련 함수 (2) 표준 시간 관련 함수 사용 예 time_t형의 시간과 struct tm형의 시간 사이의 변환 시간 데이터를 문자열로 변환 CPU 클럭 측정 : 예제 1-15 Linux System Programming
분기 함수 (1) 분기 함수 C 언어의 goto 명령은 하나의 함수 안에서 한 문장에서 다른 문장으로 분기함 한 함수에서 다른 함수로 분기할 때 사용하는 함수 C 언어의 goto 명령은 하나의 함수 안에서 한 문장에서 다른 문장으로 분기함 주로 효과적인 오류 회복 기능을 제공하기 위해 사용 헤드 파일: setjmp.h 종류: Data type: jmp_buf setjmp() longjmp() Linux System Programming
분기 함수 (2) 분기 함수 사용 예 예제 1-17 Linux System Programming